Как хранить информацию о том, какие уведомления были прочитаны пользователем? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть набор уведомлений или информационных элементов, хранящихся вasticsearch. Как только пользователь увидел уведомление, мне нужно пометить его как увиденное этим пользователем. Пользователь может фильтровать документы по состоянию чтения / непрочитанного. Уведомления будут просматриваться многими пользователями, а статус просмотра будет постоянно обновляться. Каков наилучший способ хранения этих данных. Должен ли я хранить список пользователей, которые видели это уведомление, в том же самом документе, или я должен создать родительские дочерние отношения.

1 Ответ

1 голос
/ 26 марта 2020

Конечно, вам следует избегать родительского или дочернего типа, потому что они являются дорогостоящими в вычислительном отношении. лучший способ установить связь с большим количеством данных - это денормализовать ваши данные и поместить их в разные индексы. Пожалуйста, прочитайте здесь и здесь . Пример:

PUT notification
{"mappings": {
    "properties": {
          "content": {
               "type": "text"},
           "id_notification":{
                "type":"keyword" }{
                   }}
}
}

Тогда индекс пользователя:

PUT user
{"mappings": {
    "properties": {
          "general_information": {
               "type": "text"},
           "id_user":{
                "type":"keyword" }{
                   }}
}
}

еще один индекс для отношений:

 PUT seen
{"mappings": {
    "properties": {
          "seen": {
               "notification_id":{
               "type": "keyword",
                "fields":{
                   "user_id":{
                "type":"keyword"}}},
           "unseen":{
               "notification_id":{
               "type": "keyword",
                "fields":{
                   "user_id":{
                "type":"keyword"}}}}
}
}

Извините за текстовый формат, у меня сейчас нет кибаны. Следует обратить внимание, что для перехода от информационных индексов - пользователя, уведомления - к индексу поддержки - видно - необходимо сделать многоиндексный запрос - выполните c здесь . это будет работать, потому что имя и значения полей - user_id, messages_id - одинаковы в разных индексах. Подполя user_id в видимом индексе являются массивом ключевых слов. Однако вы можете сделать user_id единственным ключевым словом и родителем поля array_id ключевого слова messages. В каждом случае они сохраняют отношения один ко многим, лучший выбор зависит от ваших данных

...