两种方法都有不同的含义。
假设您使用的是Elasticsearch的默认设置,则每个模型具有1个索引将大大增加分片的数量,因为1个索引将使用5个分片,而5个数据模型将使用25个分片;虽然在1个索引中有5种对象类型仍将使用5个分片。
将每个数据模型作为索引的含义:
- 索引内的搜索效率高且速度快,因为每个分片中的数据量应较小,因为它已分配给不同的索引。
- 从2个或多个索引中搜索数据模型的组合将产生开销,因为查询必须跨索引发送到更多分片,然后编译并发送回用户。
- 如果您的数据集很小,则不建议这样做,因为在创建每个额外的分片时会占用更多的存储空间,并且性能提升很小。
- 如果您的数据集很大并且查询需要花费很长时间,则建议使用此方法,因为专用分片将存储您的特定数据,并且Elasticsearch会更容易处理。
在索引中将每个数据模型作为对象类型的含义:
- 更多数据将存储在索引的5个分片中,这意味着在跨不同数据模型进行查询时,开销问题较小,但分片大小会大大增加。
- 由于有更多文档要过滤,因此分片中的更多数据将需要更长的时间供Elasticsearch搜索。
- 如果您知道要处理1 TB的数据并且没有在Elasticsearch映射中的不同索引或多个分片中分布数据,则不建议使用。
- 推荐用于小型数据集,因为每个分片都会占用硬件空间,因此不会浪费存储空间来提高性能。
如果您要问什么是太多数据与小数据?通常,它取决于处理器速度和硬件的RAM,用于Elasticsearch的映射中每个变量内存储的数据量以及查询要求;在查询中使用多个方面会大大降低您的响应时间。没有直接的答案,您将必须根据需要进行基准测试。



