我正在开发一个小型项目,其中包含大量不经常更改的人员数据集。每条记录都存储有一个人的姓名和他们工作的以前公司的列表(按编号ID)。
我正在编写一个单页的Web应用程序,它允许您搜索并直观地查看人员和公司的连接。如果我输入" John Smith",它将向我展示他为之工作的公司,在该公司工作的人员,以及他们为之工作的公司,以及如何(如网络图)。
我目前正在使用MongoDB存储所有这些人......但我觉得这不是一个最佳解决方案。我看到有许多不同的数据存储,如Cassandra(宽列),Couchbase(类似于Mongo?),ElasticSearch(搜索),Neo4J(图形),它们可能更优化并提供更好的性能。
有大量选择可供选择,但我不确定如何选择最佳解决方案。
是否可以使用多个数据库(例如MongoDB和Neo4J),或者在实践中这是不好的,因为很难将它们保持同步?
如何选择最优化的技术集以确保我的应用程序运行良好并可以轻松查询我的数据集?
答案 0 :(得分:1)
虽然这个问题可能会以意见为基础,但您需要考虑一些问题。
A)将网络更新为规范化存储(例如mongo)有时会出现问题,一旦更新网络中的一个点,您最终必须更新相邻节点以及多个MongoDb文档。
请注意,它与Elasticsearch相同。
B)你提到"搜索"。在上述技术中,只有一个真正的候选者,它是Elasticsearch。虽然Neo4j具有广泛使用的neo4j-to-elasticsearch插件或APOC之类的酷炫集成,但当您开始对搜索有一些需求时,ES就是这个星球上最好的技术之一。
所以IMO,充分利用两者。很多大公司都在这样做,Airbnb就是这样的(https://www.youtube.com/watch?v=gayXC2FDSiA)
您最终得到的是能够从强大的搜索结合基于图形的相关性提升中获益。
更复杂的例子是我们称之为Graph-Aided Search。
答案 1 :(得分:0)
1)有趣的是你声明结构“像网络图”。所以那种数据库显然是合适的。
2)保持几个数据库同步是一个痛苦,毫无疑问,但你确实声称你的数据集非常静态。因此,您可以处理疼痛并为问题的每个部分选择最佳匹配。另一方面......像Neo4j和MongoDB这样的解决方案确实包含(或易于实现)全文搜索功能。除非您需要超级搜索功能,否则我认为Elasticsearch不是您的问题的候选者。
3)我会选择两个可能的候选人(并且我个人会选择Neo4j(图表)并坚持使用MongoDB(因为您已经获得了该格式的数据))并进行POC。你能回答你的问题吗?它是否足够灵活以回答不同的问题?
当然只是我的2.5欧元意见。
此致 汤姆