筛选搜索的最有效方法是什么?

时间:2014-01-19 21:04:39

标签: performance mongodb

我正在使用node.jsmongodb

我将进行数据库设置并使用进行实时更新,以便再次查询db或将新更新推送到客户端。

我想弄清楚过滤数据库的最佳方法是什么?

有关正在查询的内容以及实时更新的更多信息:

数据库中的文档将包含地址,城市,时间,包裹数量,名称,价格等信息。

过滤器包括城市/价格/名称/时间(仅表示查看同一城市内或同一时段内的地址)

实时信息:包括向数据库添加新文档,这将基本上更新网站上的管理员,并附上新地址的通知。

方法1:使用要搜索的过滤器查询数据库?

方法2:查询所有搜索的数据库,然后在客户端(Javascript)对其进行过滤?

方法3:查询所有搜索的数据库,然后将其存储在localStorage中,然后查询localStorage以了解过滤器的内容?

试图弄清楚用户过滤它的最快方法是什么? 此外,如果它与最具成本效益的方式不同,那么最具成本效益的(我假设它是较少的数据库查询)......

1 个答案:

答案 0 :(得分:1)

很难说,因为我们没有看到过滤器的确切条件,但总的来说:

  • Mongo在查询条件中只能使用1个索引。因此,该索引涵盖的任何字段都可用于有效过滤。否则它可能会进行全表扫描,这很慢。如果您正在使用索引,那么您可能正在进行最有效的查询。 (Mongo仍然可以使用另一个索引进行排序)。
  • 有时候你会被迫在客户端进行处理,因为Mongo无法做你想做的事情或需要太多的查询。
  • 效率最低的选项是将结果存储在某处,因为IO很慢。如果您将它们用作缓存并且不重新计算,这只会对您有所帮助。
  • 还要考虑网络的开销和延迟。如果您必须将大量数据发送回客户端,则速度会变慢。一般来说,Mongo会比你在客户端做更好的过滤工作。

根据您的说法,如果您可以在时间段内按地址过滤,那么您可以拥有一个减少大量文档的索引。您最有可能需要复合索引 - 多个字段。