Оптимальная система баз данных для фильтров
Я строю веб-сайт, который реализует фильтры, которые могут быть применены к набору данных. Позвольте мне объяснить эти фильтры. В этом случае это будет сайт с домами.
Number of rooms:
2 or less ( 2271 )
3 or more ( 4283 )
4 or more ( 2223 )
5 or more ( 1213 )
Price range
More then {fill in number}
Less then {fill in number}
Type
For sale ( 2938 )
For rent ( 1029 )
Вы видите это чаще в эти дни. Всего будет около 7 фильтров.
Теперь я не уверен, какую базу данных мне следует использовать. Будет около 10000 объектов и ежедневных изменений (около 1% от набора данных). Два, которые я рассматриваю, являются:
MongoDB объектно-ориентированный
Прежде всего, я новичок в этих, так называемых, объектно-ориентированных базах данных. Но я слышал несколько хороших историй о них. Они схемы меньше и, вероятно, очень быстро на работе.
MySQL реляционная база данных
Я использовал MySQL раньше, в таких ситуациях производительность была приемлемой. Я использовал EAV-модель, которая делает базу данных более динамичной. Я использовал движок InnoDB с отношениями для поддержания целостности.
Проблема в том, что когда я использую несколько фильтров, подзапросы складываются, это происходит, когда я вычисляю количество возможностей, когда вы выбираете фильтр.
Что вы думаете о производительности в этой ситуации, что DBMS будет работать лучше?
2 ответа
Вы можете использовать либо.
если вы используете денормализованную таблицу в mysql (то есть без соединений), она похожа на объект в mongoDB, но сложнее для запроса.
Так что, если ваши данные могут быть ненормализованы разумным способом, используйте Mongo иначе, RDBMS.
С 10 000 записей производительность должна быть достойной в MySQL. Поскольку вы уже знакомы с MySQL, я рекомендую вам это использовать. Ты можешь попробовать GROUP BY ... WITH ROLLUP
как описано здесь, чтобы получить работу только с одним запросом. MySQL, так же как и вашему клиенту, потребуется проделать дополнительную работу, но я думаю, что это будет компенсировано сокращением количества запросов.