ElasticSearch与关系数据库

Lea*_*dro 5 elasticsearch

我正在创建一个微服务来处理在软件中创建的联系人。我需要创建联系人,还需要根据一些信息(姓名,姓氏,电子邮件,电话号码)搜索联系人是否存在。这个想法是这样的:客户打电话,如果不存在,我们创建联系人询问他的所有个人信息。他第二次打电话时,我们将按姓名,姓氏,电子邮件搜索巧合,以检测该联系人已存在于我们的数据库中。我当时想使用MongoDB作为主要存储并使用ElasticSearch来执行查询,但是我不知道此查询与普通关系数据库中的查询之间是否真的有很大的区别。

编辑:想象一个呼叫中心一直在从大多数不同的人那里接听电话,而我们想快速搜索(按姓名,电子邮件,姓氏),如果该人在我们的数据库中,ElasticSearch对此是否有用?

Har*_*ald 8

关系数据库可以存储数据并为其建立索引。

搜索引擎可以索引数据,但也可以存储数据。

关系数据库的读写性能更好。搜索引擎更擅长通过各种技巧进行真正的快速搜索,例如各种标准化:小写,ä-> a或ae,前缀匹配,ngram匹配(如果分别索引)。如今,存储在商店中的100万或1000万条目已不是什么大问题,但是您的查询负载是多少?嗯,服务中心的工作人员如此之多,因此您的查询负载可能远远小于1qps。关系数据库完全没有问题。如果您希望如上所述进行某种标准化,或者开始为自由文本注释(客户描述)建立索引,则搜索引擎将变得有意义。


Jas*_*zen 6

如果您对性能没有问题,请保持简单,并使用1个单个数据存储(可能在您的应用程序中有一些缓存)。

Elasticsearch并不是要成为主要的数据存储,所以我的建议是使用简单的关系数据库(例如Postgres)并使用简单的SQL查询/ ORM映射器。如果数据集不是真的很大,它应该足够快。

如果您在搜索中遇到性能问题,则可以将Relation db和Elasticsearch结合使用。您可以使用Elasticsearch馈送器使用关系数据库中的数据更新ES。

  • @emilly Elasticsearch 是为快速搜索而构建的,在该特定任务中非常出色,但 ES 并不完全符合 ACID。您可以使用 RDBMS 作为主存储并将数据同步到 Elasticsearch 以进行快速搜索(例如使用 feeders(rivers))。对于大数据,市场上有更好的解决方案,如 Cassandra、MongoDB、Neo4J…… (2认同)