Тяжелые математические запросы и базы данных NoSQL - PullRequest
3 голосов
/ 13 марта 2012

У меня есть очень специфический формат данных и потребность в запросах, и мне нужно знать, подходит ли DB NoSQL для этой потребности.Я не спрашиваю "какая БД лучше".Меня интересуют возможности .

Мне нужно хранить данные в стиле EAV.Магазины документов с разреженными индексами идеально подходят для этого.Таким образом, я могу создать индекс для каждого параметра по его значениям.При запросе будут затронуты только необходимые индексы.Например, MongoDB идеально подходит для этого. Это нужно # 1.

Запрос состоит из двух этапов.Первый представляет собой простой эквивалент «ГДЕ» и включает в себя серию операций <=> с действительными числами.Результаты могут быть в десятках тысяч записей, но, как правило, в тысячах. Это потребность № 2.

Второй этап включает в себя тяжелую математику, которую я должен выполнить на результатах этапа 1, чтобы оценить их.Эта математика предполагает интенсивное использование полномочий и более простых операций.Затем результаты сортируются по рангу, и «100 лучших» возвращаются клиенту. Это нужно № 3.

MongoDB - единственная NoSQL DB, с которой я относительно знаком, поэтому я буду использовать ее в качестве справочного материала.Я не верю, что он может выполнять математику в запросах, и даже если это возможно, он, вероятно, будет медленным.Я считаю, что математика должна быть выполнена на клиенте (в C или CUDA).Это означает, что данные должны очень быстро передаваться из БД в клиент.Я знаю, что MongoDB имеет собственное двоичное соединение, но, например, Couchbase использует REST, что, я считаю, замедлит его при передаче данных больших наборов данных.

Причина, по которой я не остановился на MongoDB, заключается в том, что яМне нужны распределенные серверы, которые, например, для Couchbase лучше подходят.

Поэтому мне нужно решение, которое может либо выполнять быструю внутреннюю математику, ограничивая таким образом количество передаваемых записей, либоочень быстро переносить записи, чтобы их можно было обрабатывать на клиенте. Я понимаю, что единственный способ узнать - это проверить, но я не знаю, отсюда и возникает вопрос, какие БД NoSQL обладают упомянутыми возможностями.

1 Ответ

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

MongoDB обеспечивает выполнение JavaScript на стороне сервера, что может решить некоторые ваши проблемы, но я боюсь, что не могу сказать, насколько эффективно. Однако я подозреваю, что ваш рабочий процесс связан с вводом / выводом (вы упомянули тысячи записей), поэтому, вероятно, лучше не выполнять обработку клиента. Конечно, тест скажет правду, но я предлагаю другое решение.

Вы пробовали Redis ? Он имеет мощные отсортированные наборы, которые идеально подходят для ваших запросов диапазона и ранга. Кроме того, в следующей версии будут представлены сценарии LUA, которые исправят природу ввода-вывода вашего рабочего процесса. Имейте в виду, что Redis действительно супер быстрый.

...