我选错数据库了吗?DynamoDB vs Aurora



我正在建立一个房地产网站与物业列表,一些过滤器搜索和自动完成的地址字段。它工作得很好,但是自动补全的性能超级慢. 几乎需要一秒钟的时间才能得到回应。考虑到所有的服务都在我所在的地区,我认为这相当慢。

我即兴创作了一种"模糊";搜索我拆分源字符串的地方(例如,如果用户搜索"Jumeirah, Rimal"变为["jumeirah", "rimal"]),并尝试匹配位置的完整"路径"(像locationID/city/community/sub-community/tower这样的字符串,在这个例子中"are.1.50/Dubai/Jumeirah Beach Residence/Rimal")到分割字符串的每个部分。表达式变成如下所示:

contains(#path, :fullString) OR 
(contains(#path, :stringOne) AND contains(#path, :stringTwo) AND ... )

重要的是,因为我需要使用"contains"操作符,我不能用KeyExpression有效地做到这一点,我需要使用较慢的FilterExpression进行全面扫描。我只有7500个地点可以搜索,而且性能已经很差了。

这让我想到如果我应该使用像Aurora这样的基于SQL的数据库。AFAIK SQL可以非常有效地执行复杂的查询。

我还将研究AWS的弹性搜索解决方案。

你觉得怎么样?

当您能够执行查询操作以查找精确的分区键时,DynamoDB是最高效的,使用扫描操作符可能会导致性能下降并导致读积分的使用增加。

虽然像Aurora这样的关系型数据库可以执行此操作,但使用ElasticSearch可能会更高效。

通过使用ElasticSearch功能来执行模糊搜索是支持的,这是使用它作为文档存储的关键好处之一。

如果您使用的是Postgresql Aurora,请使用:https://hub.packtpub.com/how-to-perform-full-text-search-fts-in-postgresql/

这是带索引的数据库内全文搜索(检查GIN和RUM索引类型)。不需要将数据从数据库复制到Elasticsearch实例中,也可以从那里获得更多的创意,并使用数据库中的额外字段以更好的方式对结果进行排名。绝对推荐。例如,现在我知道这些行匹配模糊搜索,让我们做一个内部连接获得额外的数据,并调整排名函数,以显示地理位置结果的距离(PostGIS)

我看到一些人通过删除elasticsearch服务器并从自己的postgres中提供FTS查询,节省了80%以上的账单

最新更新