Рекомендовать масштабируемое решение для базы данных, которое может выполнять ослепительно быстрые сложные запросы для сотен миллионов записей. - PullRequest
0 голосов
/ 13 августа 2011

Я очень хорошо использовал Lucene, чтобы предоставить решение, где мои пользователи могут очень быстро запросить множество записей (более 100 миллионов).У пользователей есть большая форма с множеством различных полей, из которых они могут выбирать.У них также есть опция «расширенного поиска», где они могут создавать свои собственные запросы, которые поддерживают вложенную логику с операторами AND, OR и NOT.

Я использую MSSQL в качестве основного хранилища данных, а затем индексирую данные в Lucene,Запрос Lucene возвращает мне список идентификаторов, которые я затем запрашиваю непосредственно из базы данных MSSQL, что позволяет избежать сложных (медленных) планов запросов, которые могут быть результатом попытки эквивалентного запроса непосредственно к базе данных.С небольшим планированием и дизайном, Lucene показал себя очень способным выполнять очень быстрые запросы, когда запрос имеет значительную сложность, например ((A AND B) OR (B AND C AND D)) OR (A[X TO Y] AND K) OR (Q,W,E,R,T,Y,U,I,O).Вы получите картину.

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

Очевидно, что есть несколько отличных решений для хранения огромных объемов данных ипо-прежнему быстро запрашивать на базовом уровне.Я хочу знать, есть ли у вас какие-либо рекомендации относительно того, какое из этих решений также способно выполнять очень быстрый поиск, когда запрос часто имеет определенный уровень сложности, как описано ранее.

1 Ответ

0 голосов
/ 30 октября 2011

Насколько я могу судить, для этого не существует действительно хорошего унифицированного решения. Мое решение:

  • MongoDB для хранения больших данных и быстрого поиска на основе ключей
  • Lucene для сверхбыстрых, сложных запросов

В моем индексе я храню идентификаторы документов, которые затем извлекаю из базы данных по мере необходимости.

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