弹性搜索非规范化导致巨大的更新

时间:2019-04-11 21:02:06

标签: elasticsearch bulkupdate

我正在考虑使用弹性搜索来加快查询速度。 到目前为止,我的数据已存储在关系数据库中。 像许多其他问题一样,我有一个问题,即关系数据库中的微小更改会导致非规范化弹性搜索中的大量更新。

例如,这里的简单角色和权限。 如果我想授予普通用户写CIRCLE数据的权限,则需要在类型= CIRCLE和role_id = 1001的弹性搜索中更新所有数据。这可能是数百万行。我认为角色admin用户每次执行更改后都需要等待几分钟,这是不可接受的。

是否有一种快速的方法来定义弹性搜索中的列类型,在该类型中,由于内容变化不大,因此以某种方式压缩了权限列的存储?例如“压缩的json”

-- DATA ----------------------------
id          name        type
------------------------------------
1           A           BOX
2           B           CIRCLE
3           C           BOX
4           D           CIRCLE
5.....
10000000    ABCDEF...   CIRCLE



-- ROLE_ASSIGNMENT -----------------
role_id    type     read    write
------------------------------------
1000       BOX      yes     yes
1000       CIRCLE   yes     yes
1001       BOX      yes     no
1001       CIRCLE   yes     no


-- ROLE ----------------------------
id      name
------------------------------------
1000    admin
1001    normaluser


-- ELASTIC -------------------------
id      name       type       rights
------------------------------------
1       A          BOX        rights : {
                                right : {
                                  role_id = 1000,
                                  read = yes,
                                  write = yes
                                }, 
                                right : {
                                  role_id = 1001,
                                  read = yes,
                                  write = no
                                }, 
                              }
2       B          CIRCLE     rights : {
                                right : {
                                  role_id = 1000,
                                  read = yes,
                                  write = yes
                                }, 
                                right : {
                                  role_id = 1001,
                                  read = yes,
                                  write = no
                                }, 
                              }
3       B          BOX        rights : {
                                right : {
                                  role_id = 1000,
                                  read = yes,
                                  write = yes
                                }, 
                                right : {
                                  role_id = 1001,
                                  read = yes,
                                  write = no
                                }, 
                              }
4       D          CIRCLE     rights : {
                                right : {
                                  role_id = 1000,
                                  read = yes,
                                  write = yes
                                }, 
                                right : {
                                  role_id = 1001,
                                  read = yes,
                                  write = no
                                }, 
                              }
......
100000000

0 个答案:

没有答案