внедрить поисковые фильтры в Java - PullRequest
4 голосов
/ 16 июня 2011

Нам нужно реализовать поисковый фильтр (например, Net-log) для моего сайта социальной сети по профилю пользователя, фильтры по профилю включают в себя возраст, пол и интересы

у нас работает около 1 млн профилей, работающих на MySQL,MySQL не кажется подходящим вариантом для реализации таких фильтров, поэтому мы также смотрим на Cassandra,

Так каков наилучший способ реализации такого фильтра, результат должен быть очень быстрым

Например, возраст = 18 - 24 и пол = мужчина и интерес = Футбол

Возраст в дате, пол и интересы varchar

РЕДАКТИРОВАНИЕ:
Позвольте мне перефразировать проблему, Как я могу перефразироватьполучить быстрый результат любого типа поиска.Это может быть на основе имени профиля или любой другой вещи профиля в записях профиля 1M.

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Было бы хорошо для вашего проекта внести изменения в SQL. Возможно, вы захотите изменить столбец «Интерес» с поля свободного ввода (varchar) на тег (например, «многие ко многим» в дополнительной таблице).

Вы использовали пример Football с оператором like. Если вы изменили его на тег, то у вас возникнет начальная структурная проблема с выбором места размещения:

football
Football
American Football
Australian-rules football

Но как только вы это сделаете, теги помогут вашему оператору выбора пройти намного быстрее.

Без этого изменения вы перенесете свою проблему управления данными из базы данных (которая оборудована для ее обработки) в Java (которая может отсутствовать).

0 голосов
/ 16 июня 2011

Возможно, имеет смысл попытаться оптимизировать ваш запрос (возможно, по крайней мере, есть некоторые вещи, которые вы можете сделать). Похоже, у вас большая база данных, и если вы возвращаете большой набор результатов и фильтруете результаты с помощью Java, у вас могут возникнуть проблемы с производительностью из-за того, что все данные хранятся в кеше.

В этом случае вы могли бы попытаться изучить кеширование результатов вне базы данных и чтение из них. Это то, что Hibernate делает очень хорошо , но вы можете реализовать свою собственную версию, если это необходимо. Если это то, что вас интересует, Memcached , это хорошая отправная точка.

Я только что заметил это для MySQL. Я не знаю, насколько это эффективно, но у них есть некоторые встроенные функции полнотекстового поиска , которые могут помочь ускорить процесс.

...