背景
我正在将es索引迁移到es版本6。我现在卡住了,因为es6删除了using on“\u type”字段。
旧实现(es2)
我的软件有很多用户(>100k)。每个用户在es中至少有一个文档。因此,层次结构如下所示:
INDEX -> TYPE -> Document
myindex-> user-123 -> document-1
这里的关键点是,通过这种结构,我可以轻松地删除特定用户的所有文档。
DELETE /myindex/user-123
(删除特定用户的所有文档,只需一个命令)
问题
es6不再支持“\类型”。
可能的解决方案
而不是使用 _type
,使用索引名称作为 USER-ID
. 所以我的索引看起来像:
"user-123" -> "static-name" -> document
删除用户是通过删除索引(而不是删除)完成的 type
在以前的实现中)。
问题:
我首先担心的是索引的数量和性能:拥有大约100万个索引在性能方面是可以接受的吗?别忘了我得经常查。
我的大多数用户都有少量文档存储在es中。对于<10个文档来说,持有一个应该很昂贵的碎片有意义吗?
我的数据架构对你来说合理吗?
欢迎提供任何其他提示!谢谢。
2条答案
按热度按时间bqf10yzr1#
我不会每个用户有一个索引,这是一种资源浪费,特别是如果每个用户只有10个文档。
我要做的是使用过滤别名,每个用户一个。
所以索引将被命名为
users
类型将是一个静态名称,例如。doc
. 对于用户123,该用户的文档将全部存储在users/doc/xyz
在每个文档中,您需要添加用户id,例如。然后您可以为用户123的所有文档定义一个过滤的别名,如下所示:
如果您需要删除用户123的所有文档,那么您可以这样做:
h79rfbju2#
拥有这么多的索引绝对不是一个好方法。如果您只关心用一个命令删除多个文档。然后可以使用elasticsearch提供的delete by query api
您可以在包含每个文档值的所有文档中引入“subtype”属性,例如“user-”值。所以在您的情况下,文档看起来是这样的。