我正在构建一个应用程序,我在其中跟踪用户活动更改并向用户显示活动日志。这里有几点:
- 每天插入 1 亿条记录。
- 这些记录将被索引并立即在搜索结果中可用(几秒钟内)。
- 用户可以在公开的 10 个字段中的任何一个上过滤记录。
我正在构建一个应用程序,我在其中跟踪用户活动更改并向用户显示活动日志。这里有几点:
我的建议是ElasticSearch,因为您的主要用例是“过滤器”( ElasticSearch 中的Facets)和搜索。它是为扩大规模而编写的(否则 Lucene 也很好)并牢记大数据。
我认为 Mongo 和 Oracle 都无法满足您的需求。我建议从您的主数据存储中卸载搜索组件,可能类似于 ElasticSearch:
每天 1 亿条记录听起来需要一个快速增长的服务器场来存储数据。我不熟悉 Oracle 如何分发这些数据,但使用 MongoDB,您需要根据搜索查询使用的字段(包括用于过滤的 10 个字段)对数据进行分片。如果您仅通过分片键进行搜索,MongoDB 足够智能,只会命中包含正确分片的机器,因此就像在一台机器上查询一个小型数据库以获取您需要的内容一样。此外,如果分片键可以放入集群中每台机器的内存中,并使用 MongoDB 的 btree 索引进行索引,那么您的查询将非常即时。