Подходящий сервер для хранения данных для приложения Erlang, когда данные не умещаются в памяти - PullRequest
4 голосов
/ 13 ноября 2008

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

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

Ответы [ 5 ]

5 голосов
/ 25 ноября 2008

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

1 голос
/ 25 ноября 2008

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

1 голос
/ 25 ноября 2008

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

0 голосов
/ 07 января 2009

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

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

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

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

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

0 голосов
/ 17 ноября 2008

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

...