Подходящий сервер для хранения данных для приложения Erlang, когда данные не умещаются в памяти

StackOverflow https://stackoverflow.com/questions/287233

Вопрос

Я изучаю возможные варианты организации хранения данных для приложения Erlang. Данные, которые он должен использовать, представляют собой огромную коллекцию двоичных двоичных объектов, индексируемых по коротким строковым идентификаторам. Каждый блоб меньше 10 Кб, но их много. Я ожидаю, что в общей сложности они будут иметь размер до 200 Гб, поэтому очевидно, что они не помещаются в память. Типичная операция с этими данными - либо чтение большого двоичного объекта по его идентификатору, либо обновление большого двоичного объекта по его идентификатору, либо добавление нового. В каждый данный период дня используется только подмножество идентификаторов, поэтому производительность доступа к хранилищу данных может выиграть от использования кэша в памяти. Говоря о производительности - это довольно критично. Цель - обеспечить около 500 операций чтения и 500 обновлений в секунду на обычном оборудовании (скажем, на виртуальной машине EC2).

Есть предложения, что использовать здесь? Как я понимаю, dets не может быть и речи, так как он ограничен 2G (или 4G?). Мнезия, вероятно, тоже не подлежит сомнению; У меня сложилось впечатление, что он был в основном предназначен для случаев, когда данные умещаются в памяти. Я подумываю попробовать драйвер EDTK Berkeley DB для этой задачи. Будет ли это работать в приведенном выше сценарии? У кого-нибудь есть опыт использования его на производстве в аналогичных условиях?

Это было полезно?

Решение

tcerl столкнулись с тем же ограничением размера. Я не использую Erlang в эти дни, но это звучит как то, что вы ищете.

Другие советы

Вы смотрели на то, что делает CouchDB? Это может быть не совсем то, что вам нужно в качестве продукта, но есть много кода erlang для хранения данных. Также ведутся разговоры о предоставлении собственного интерфейса erlang вместо API REST.

Есть ли причина, по которой вы не можете просто использовать файловую систему, рассматривая имя файла как идентификатор строки, а содержимое файла как двоичный двоичный объект? Вы можете выбрать одну (файловую систему), которая соответствует вашим требованиям к производительности, и вы должны получить кеширование в основном бесплатно, предоставляемое вашей ОС.

Mnesia может отлично хранить данные на диске. Также есть dets (дисковое хранилище терминов), которое примерно аналогично Berkeley DB. Он находится в стандартной библиотеке: http://www.erlang.org/doc/ приложения / STDLIB / index.html

Я бы порекомендовал Apache CouchDB.

Он отлично подходит для Erlang, и, исходя из его звучания (вы упоминаете BLOB-объекты на основе идентификаторов и не упоминаете никаких реляционных требований), вы ищете ориентированную на документы базу данных.

Поскольку интерфейс является REST, вы можете очень просто добавить обычный HTTP-кеш перед ним, если вам нужно кеширование.

Документация для CouchDB очень высокого качества.

Он также имеет встроенную функцию Map-Reduce:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top