Я работаю над системой полнотекстового индекса для моего проекта. Как часть процесса индексации страниц он разбивает данные на очень, очень большое количество очень маленьких кусочков.
Я получил размер кусков равным 20-30 байтов, и он может быть меньше, в основном это 2 8-байтовые целые числа и число с плавающей точкой, из которых состоят фактические данные.
Из-за масштаба, который я ищу, и количества создаваемых им кусков, я ищу альтернативу mysql, которая показала значительные проблемы при значении, значительно ниже моей цели.
В настоящее время я думаю, что хранилище значений ключей будет лучшим вариантом для этого, и я изменил свой код соответствующим образом.
Я пробовал число, но по какой-то причине все они, кажется, масштабируются даже меньше, чем mysql.
Я собираюсь хранить порядка сотен миллионов или миллиардов или более пар ключ-значение, поэтому мне нужно что-то, что не будет сильно ухудшать производительность по размеру.
Я пробовал использовать memcachedb, membase и mongo, и хотя все они были достаточно просты в настройке, ни один из них так хорошо не масштабировался для меня.
* * * * * У мембраны
было больше всего проблем из-за количества требуемых ключей и ограниченного объема доступной памяти. Скорость записи здесь очень важна, поскольку она очень близка к равномерной рабочей нагрузке, я пишу что-то один раз, затем читаю несколько раз и сохраняю для последующего обновления.
Мне не нужна большая производительность при удалении, и я предпочел бы что-то, что может хорошо кластеризоваться, так как я надеюсь, что в конечном итоге оно сможет масштабироваться на разных машинах, но пока что оно должно работать на одной машине.
Я также надеюсь упростить развертывание этого проекта, чтобы облегчить настройку. Проект написан на php, поэтому к нему нужно легко получить доступ с php.
Мне не нужно иметь строки или другие абстракции более высокого уровня, они в большинстве случаев бесполезны в этом случае, и я уже сделал код из некоторых других моих тестов, чтобы перейти к хранилищу значений ключа, и это похоже на скорее всего, будет самым быстрым, так как у меня есть только 2 вещи, которые будут извлечены из строки, связанной с третьей, поэтому для использования хранилища значений ключей не требуется дополнительной работы. Кто-нибудь знает какие-нибудь простые в использовании проекты, которые могут масштабироваться таким образом?
Я использую это хранилище для хранения отдельных наборов из трех чисел (размеры основаны на том, как они были сохранены в mysql, что может не соответствовать действительности в других местах хранения) 2 восьмибайтовых целых числа, одно для идентификатора document и one для идентификатора слова и плавающего представления пропорции документа, которым было это слово (количество раз, когда произведение появилось, деленное на количество слов в документе). Индексом для этих данных является слово id и диапазон, в который попадает идентификатор документа, каждый раз, когда мне нужно извлечь эти данные, будут все результаты для данного идентификатора слова. В настоящее время я превращаю слово id, диапазон и счетчик для этого слова / диапазона в каждое двоичное представление чисел и объединяю их, чтобы сформировать ключ вместе с двузначным числом, чтобы сказать, какое значение для этого ключа я храню, идентификатор документа или значение с плавающей точкой.
Измерение производительности было несколько субъективным, глядя на результаты процессов, помещающих данные или извлекающих данные из хранилища, и наблюдая, как быстро они обрабатывали документы, а также быстро обновляя мои статистические счетчики, которые отслеживают более точную статистику того, насколько быстро Система работает и смотрит на различия, когда я использовал каждый метод хранения.