例如,我有1000个用户。每个用户的数据都不大,最大为1GB。所以我有两个索引策略。
- 大索引:我将有一个单独的索引。然后,每当用户搜索一些数据时,我都会在查询中添加一个
user_id
- 小型索引:每个用户都是一个Elasticsearch索引。因为数据并不庞大,我们只需要1-2个碎片
我认为第二种方法要快得多,因为我们不需要在查询中添加user_id
。第一种方法可能较慢,因为它将去往许多碎片,同时,它必须在查询中计算user_id
。
然而,有一些ref1 ref2建议我们应该保持碎片的总数相对较小。
在一个实际的环境中,什么是解决我这种情况的好办法?
为每个用户创建一个索引是浪费资源,尤其是当您有1000多个用户时。如果你的应用程序成功了,用户群也在增长,那么索引的数量和碎片的数量也会随之增加。即使每个索引有一个碎片,拥有1000个碎片也已经消耗了相当多的资源。
有一个单独的索引,并用user_id
字段将所有用户放入其中,以区分每个用户的数据,这样效率会高得多。