Упругая поисковая денормализация приводит к огромному обновлению - PullRequest
0 голосов
/ 12 апреля 2019

Я думаю об использовании упругого поиска для ускорения моих запросов.Мои данные хранятся в базе данных отношений.Как и у многих других, у меня проблема в том, что небольшие изменения в реляционной базе данных приводят к огромным обновлениям в денормализованном упругом поиске.

Так, например, это простые роли и права здесь.Если я хочу дать normaluser права на запись данных CIRCLE, мне нужно обновить все данные в упругом поиске, где type = CIRCLE и role_id = 1001. Это может быть миллионы строк.Я предполагаю, что администратору ролей нужно будет ждать минуты после каждого изменения, которое он делает, что недопустимо.

Существует ли быстрый способ определения типа столбца в упругом поиске, в котором хранилище столбца прав каким-то образом сжато, потому что вариантов содержимого не так много?Например "сжатый 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
...