быстрый формат индекса для «постоянной базы данных» - PullRequest
2 голосов
/ 13 марта 2012

Я занимаюсь программированием на Linux и столкнулся с проблемой, которая требует чрезвычайно быстрой скорости поиска.

Если таблица, как обычная таблица MySQL, выглядит следующим образом:

ID   name   age   sex  score_a   score_b  score_c  date

и константа , что означает, что после создания этой таблицы обновления не были разрешены. Он служит только для чтения. Поскольку он был постоянным, поэтому, я думаю, должен быть лучший формат индекса для более быстрого поиска по условиям (например, возраст, баллы и т. Д.), А не «индекс дерева B», реализованный в большинстве баз данных для индекса.

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Собираетесь ли вы выполнять поиск по диапазону («возраст от 10 до 12, от 13 до 15 и т. Д.», «От 40 до 60, от 61 до 70 и т. Д.») Или поиск по одному значению («имя» Квентин Смит или оба? Для поиска по одному значению, хеш подходит и быстро; В частности, для поиска по диапазону лучше всего использовать B-дерево и его варианты.

Вы ищете где-то в области 50 байтов на строку для исходных данных, поэтому вам придется иметь дело с 1/2 ГБ до 15 ГБ данных. Если он находится в верхней части этого диапазона, вам понадобится большая машина, чтобы просто хранить простые данные в памяти, не говоря уже о индексах. На нижнем уровне диапазона он находится в пределах правдоподобия. Ваши индексы могут занимать немного больше места, чем необработанные данные (возможно, на 50% больше), при условии, что вы индексируете каждый из столбцов. Индекс имени будет самым большим, конечно. Столбец ID может не нуждаться в индексе, если вы можете использовать его в качестве индекса в массиве записей, но, вероятно, в данных есть пробелы, поэтому лучше всего индексировать его в любом случае.

0 голосов
/ 16 ноября 2012

Существует множество постоянных баз данных на основе файлов, которые также могут быть рассмотрены.Ищите «постоянную базу данных» в stackoverflow или в Google или Bing, и вы найдете что-то вроде:

mcdb https://github.com/gstrauss/mcdb/ (для которого я являюсь автором)

Токийский кабинет http://fallabs.com/tokyocabinet/

hamsterdb http://www.hamsterdb.com

... и другие.

0 голосов
/ 13 марта 2012

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

Большинство современных СУБД поддерживают некоторую форму кэширования запросов.Если у вас нет, вы можете кэшировать результаты ваших запросов в нечто вроде memcached.Генерация кэша будет медленной, но если поиск в кэше будет локальным, он будет очень быстрым по сравнению с поиском по индексу - обычно O (1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...