Моделирование структуры данных базы данных в реальном времени - PullRequest
0 голосов
/ 08 июня 2019

У нас есть система чата, для которой у нас есть панель аналитики.В настоящее время мы показываем самые верхние предложения.Модель выглядит следующим образом:


messages
    --key1
       -text: "who are you"
    --key2
       -text: "hello"
    --key3
       -text: "who are you"

есть триггер базы данных, который при каждом добавлении нового сообщения сохраняет счетчик, как показано ниже


stat
   --topPhrases
     --keyA
        --phrase: "who are you"
        --count: 2
     --key
        --phrase: "hello"
        --count: 1

Теперь наша панель инструментов запрашивает эти данные и показываетна приборной панели в качестве верхних предложений.

Теперь у нас проблема в том, что нам нужно добавить элемент даты.Таким образом, в настоящее время в основном это решает ответить на «самые популярные предложения, когда-либо сделанные людьми»

То, что мы сейчас хотим ответить, это «самые популярные предложения сегодня, на этой неделе, в этом месяце»

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

1 Ответ

1 голос
/ 08 июня 2019

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

Простая модель для их хранения - сохранить текущий, но затем для каждого уровня агрегации и каждого интервала:

stats
   --topPhrases
     --keyA
        --phrase: "who are you"
        --count: 2
     --key
        --phrase: "hello"
        --count: 1
   --topPhrases_byDay
     --20190607
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     --20190607
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
   --topPhrases_byWeek
     --201922
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     --201923
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
   --topPhrases_byMonth
     --201905
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     --201906
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1

В качестве альтернативы, сохраните все агрегации в виде одного списка и используйте префиксы, чтобы указать их уровень агрегации (и формат остальной части ключа):

stats
   --topPhrases
     --keyA
        --phrase: "who are you"
        --count: 2
     --key
        --phrase: "hello"
        --count: 1
     day_20190607
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     day_20190608
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     week_201922
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     week_201923
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     month_201905
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1
     month_201906
        --keyA
           --phrase: "who are you"
           --count: 2
        --key
           --phrase: "hello"
           --count: 1

Вы определенно дублируете много данных здесь, но преимущество этих моделей в том, что отображение статистики пользователю теперь тривиально. Это общий компромисс с базами данных NoSQL, запись данных становится более сложной, и сохраняется больше (дубликатов) данных, но это делает чтение данных тривиальным и, следовательно, очень масштабируемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...