SQL 和 Elasticsearch 之间的良好实践

Ore*_*ron 9 sql database search nosql elasticsearch

假设您有一个 SQL 数据库,例如 mysql 或 postgresql。您有两个表:用户和汽车。一个用户可以驾驶 N 辆车,一辆车可以由 N 个用户驾驶,因此您有第三个带有两个外键的“驾驶”表。

现在,您希望您的表用户继续使用elasticsearch,因为您希望按姓名、电子邮件等搜索用户...也许您还需要在汽车表上进行一些搜索。

我看到三种方法可以实现这一目标,我想知道最好的方法是什么:

1)放弃sql数据库。您所有的表现在都在 elasticsearch 上。您可以搜索任何您想要的内容,但您必须手动处理所有约束。

2)保留sql数据库上的结构,保留三个表,主键和外键。但是您的表仅包含elasticsearch中关联行的elasticsearch ID。例如,在表 user 中,您保留 user_id 并添加 user_elasticsearch_id ,该 ID 指向您在其中找到名称、电子邮件等的elasticsearch 行...因此您有 sql 约束,您可以进行搜索,但您必须维护两张桌子。

3)复制。你不接触你的sql数据库,你复制elasticsearch数据库上的所有行。你有你的限制,你可以搜索,但同样你必须维护两个表,并且你有两倍的数据和两倍的存储。

现在,勇敢的 stackoverflow 小伙伴,在这种情况下你会怎么做?

谢谢。

Phi*_*lip 6

关键业务数据最常见的设置是将 SQL 数据库作为主要数据存储,将 Elasticsearch 作为附加搜索索引。(=您的解决方案 3)。

对于日志等非业务关键型数据,另一种选择是让 Elasticsearch 独立运行。

解决方案 2 似乎是有线的,对我来说不是一个选择。