我是弹性搜索的新手。我正在使用弹性搜索大数据。
我的应用程序中没有联接查询,那么哪种结构最适合我的应用程序?
我正在研究过去几天的松紧带。我想分享我的经验/学习。
1)如果我们从MYSQL、SQL这样的关系数据库转移到ES
,我们需要维护所有数据之间的所有关系。在不同类型或索引中声明主键,在此基础上可以执行查询DSL。
2)如果您每天处理数百万数据,则需要进行相应的设计。有些人更喜欢基于持续时间的结构,例如Day, Week, Month
明智的。这完全取决于您的用例。对于大型数据集(~1TB),您需要将数据分布在各种indexes
和shards
中。
3)如果您有小数据集,它也将在默认设置下工作(5 shrads 1 replica
)。如果您的数据集在您的shards
中很小,它会给你更好的。
4)JOIN
查询在弹性搜索中可能很昂贵。如果您经常执行它可能会影响您的HEAP
。因此,我建议使用pre-cooked
数据(在关系数据库中执行连接查询时获得的结果数据)和具有唯一ID的文档来准备数据集。你可以参考这个。查看此处,我们如何执行JOIN
5)在设计索引时,可能需要注意以下几点:
- 不要把 Elasticsearch 当成一个数据库
- 在加入之前了解您的用例
- 明智地组织数据
- 巧妙地利用副本
- 根据实验制定容量计划
6)错误的架构可能会导致reindex
这将造成停机的沉重成本。查看本文以了解index designing
和最佳实践。