使用 nosql/elastic 搜索设计标签系统
Designing tags system with nosql/elastic search
我必须用这个模式设计一个系统。
{
"documentId" : 123
"documentType" : "paper"
"tags" :["abc","xyz"]
//other meta data of document
}
我将要执行的查询是查找 k 个流行标签、按标签获取文档、添加、删除、更新标签以及获取文档的所有标签。考虑到数据库应该具有高度可扩展性,执行此操作的最佳策略是什么。我正在考虑三种解决方案 -
- 在 NoSql DB 中创建一个文档,如 MongoDB 并在标签数组上建立索引。所以 MongoDB 是我的主要数据库
- 使用弹性搜索作为主数据库和索引完整文档。然后轻松搜索所有查询。
- 将 kafka 与 spark/storm 流解决方案结合使用
- 在视频中设计慢速和快速管道 - https://www.youtube.com/watch?v=kx-XDoPjoHw&t=1835s(不确定 spark 是否仅在内部以这种方式工作)
处理此类情况的最佳方法是什么?
视情况而定;
- 我们需要对标签系统进行自由文本搜索吗?
- 更新率是多少(每分钟更新的文档数)。
恕我直言,
如果对 Q1 的回答是 Yes 且更新率低,请使用 ES
如果问题 1 的答案是否定的,并且更新率很高,您可能需要考虑 non-Elasticsearch 解决方案。
如果更新率高且Q1为是,考虑non-Elasticsearch解决方案(取决于你的索引大小,很有可能使用ES,而不是它可能是最优的)
我必须用这个模式设计一个系统。
{
"documentId" : 123
"documentType" : "paper"
"tags" :["abc","xyz"]
//other meta data of document
}
我将要执行的查询是查找 k 个流行标签、按标签获取文档、添加、删除、更新标签以及获取文档的所有标签。考虑到数据库应该具有高度可扩展性,执行此操作的最佳策略是什么。我正在考虑三种解决方案 -
- 在 NoSql DB 中创建一个文档,如 MongoDB 并在标签数组上建立索引。所以 MongoDB 是我的主要数据库
- 使用弹性搜索作为主数据库和索引完整文档。然后轻松搜索所有查询。
- 将 kafka 与 spark/storm 流解决方案结合使用
- 在视频中设计慢速和快速管道 - https://www.youtube.com/watch?v=kx-XDoPjoHw&t=1835s(不确定 spark 是否仅在内部以这种方式工作)
处理此类情况的最佳方法是什么?
视情况而定;
- 我们需要对标签系统进行自由文本搜索吗?
- 更新率是多少(每分钟更新的文档数)。
恕我直言, 如果对 Q1 的回答是 Yes 且更新率低,请使用 ES
如果问题 1 的答案是否定的,并且更新率很高,您可能需要考虑 non-Elasticsearch 解决方案。
如果更新率高且Q1为是,考虑non-Elasticsearch解决方案(取决于你的索引大小,很有可能使用ES,而不是它可能是最优的)