Значение ключа хранилища без файловой системы?

Я работаю над приложением, в котором мы пишем много и много пар ключ-значение. На производстве размер базы данных будет составлять сотни терабайт, даже несколько петабайт. Ключи имеют размер 20 байт, максимальное значение составляет 128 КБ и очень редко меньше 4 КБ. Прямо сейчас мы используем MongoDB. Производительность не очень хорошая, потому что, очевидно, здесь много накладных расходов. MongoDB выполняет запись в файловую систему, которая выполняет запись в LVM, а затем выполняет запись в массив RAID 6.

Поскольку наше требование очень простое, я думаю, что использование системы баз данных общего назначения снижает производительность. Я думал о реализации простой системы баз данных, в которой мы могли бы помещать документы (или "значения") непосредственно в необработанный диск (фактически массив RAID) и сохранять ключи (и указатель на то, где значение хранится в необработанном виде). диск) в быстрой базе данных в памяти, поддерживаемой SSD. Это также ускорит чтение, поскольку не было бы фрагментации (в отличие от использования файловой системы).

Хотя документ редко удаляется, нам все равно придется поддерживать пул свободного места, доступного на устройстве (то, что файловая система предоставила бы).

Мой вопрос, это действительно обеспечит какие-либо существенные улучшения? Кроме того, существуют ли системы хранения документов, которые делают что-то подобное? Или что-то похожее, что мы можем использовать в качестве отправной точки?

2 ответа

Апач Кассандра приходит на ум. Это текущее решение NoSQL для массивного масштабирования. Он видит использование производства в нескольких крупных компаниях с огромными требованиями к масштабированию. Немного поработав с ним, я могу сказать, что требуется немного времени, чтобы переосмыслить вашу модель данных, чтобы она соответствовала тому, как она организует свой механизм хранения. Знаменитая статья "WTF - суперколонка" дает хорошее представление об этом. Предостережение: Cassandra действительно имеет смысл только тогда, когда вы планируете хранить огромные наборы данных и распространять их без единой точки отказа, что является критически важным требованием. С тем, как вы объяснили свои данные, это звучит как подгонка.

Кроме того, вы рассматривали Redis вообще, по крайней мере, для сохранения ключевых ссылок? Ваши требования к памяти намного превосходят возможности отдельного экземпляра, но Redis также можно настроить для сегментирования. Это не основной вариант использования, но он видит производственное использование в Craigslist и Groupon

Кроме того, вы сделали все возможное, чтобы оптимизировать монго, особенно исследуя, как можно улучшить индексацию? Mongo сохраняет данные на диск, но должна быть относительно производительной при оптимизации, чтобы сохранить самую горячую часть набора в памяти, если это возможно.

Можно ли кешировать эти данные, если они не слишком временные?

Я бы полностью предостерег вас от этого. Просто честное предупреждение. Это не стук в вас или кого-то еще, просто я лично должен был поддерживать собственные "индексы данных", написанные собственными разработчиками, которые раньше сталкивались с проблемами. На моей работе у нас есть огромное хранилище значений ключей на диске, которое является основным узким местом производительности в нашей системе, которое было написано разработчиком, который с тех пор отделился от компании. Это разочаровывает, застревая такое решение среди захватывающих возможностей NoSQL сегодня. Проекты, подобные тем, о которых я упоминал выше, используют всю мощь сообщества открытого исходного кода для проверки и оптимизации их использования. Это не то, что вы сможете достичь, работая над своим собственным решением, если вы не потратите много времени, усилий и продвижения. По крайней мере, я бы посоветовал вам взглянуть на все ваши варианты nosql и, возможно, найти проект, в который вы могли бы внести свой вклад, а не использовать собственный. Написание самого сервера баз данных, безусловно, является нетривиальной задачей, требующей огромной команды, особенно с учетом требований, которые вы дали (но если вы в конечном итоге сделаете это, я желаю вам удачи! =))

Поздний ответ, но для дальнейшего использования, я думаю, что Spider делает это

Другие вопросы по тегам