我是否为作业选择了错误的数据库? DynamoDB 与极光

Did I choose the wrong database for the job? 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 ... )

重要的是,因为我需要使用“包含”运算符,所以我无法使用 KeyExpression 高效地完成它,我需要使用较慢的 FilterExpression 进行全面扫描。我只有 7,500 个位置可供搜索,而且性能已经很差了。

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

我也会研究 AWS 的弹性搜索解决方案。

你怎么看?

当您能够执行查询操作以找到确切的分区键时,DynamoDB 的性能最高,使用扫描运算符可能会导致性能下降并导致读取信用的使用增加。

虽然 Aurora 等关系数据库可以执行此操作,但使用 ElasticSearch 执行此操作的性能可能更高。

通过使用 ElasticSearch 功能执行 fuzzy search 得到支持,这是将其用作文档存储的主要优势之一。

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

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

我看到一些人通过删除 elasticsearch 服务器并从其自己的 postgres 提供 FTS 查询来节省超过 80% 的账单