Дизайн модели данных Cassandra для функциональности уведомлений - PullRequest
1 голос
/ 06 марта 2012

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

  • получил сообщение от
  • Пользователь xyz проголосовал за вашу фотографию
  • и т.д ...

Пользователь должен будет получить диапазон последних уведомлений и удалить одно уведомление. Поэтому мне нужна оптимальная схема (50% операций чтения против 50% операций записи ??).

Моя идея ниже ... (как вы думаете, что насчет сортировки ключей по отметке времени):

notifications {
   john : {
       111-1123-3242-9202 : {type: 'newmail'; ...; timestamp: 321948293849}
       555-1123-aaac-ccc3 : {type: 'voted'; ...; timestamp: 321948293433}
   }

   anna : {...}

   ...
}

Действительно, заранее спасибо!

Tom

1 Ответ

4 голосов
/ 07 марта 2012

Я предполагаю, что "уведомления" - это ваш CF, а "Джон", "Анна" и т. Д. - ключи строк.

Предполагая, что данные для каждого уведомления относительно малы или не требуют обновления, я предлагаю использовать метки времени для имен столбцов и поместить все сериализованное уведомление (возможно, в виде json) в значение столбца. Это позволит вам очень эффективно получать последние N уведомлений и легко удалять отдельные уведомления.

При использовании pycassa запрос на выборку и удаление могут выглядеть следующим образом:

def get_notifications_for(user):
    cols = notifications_cf.get(user, column_count=10)
    return map(json.loads, cols.values())

def delete_notification(user, notification_timestamp):
    notifications_cf.remove(user, columns=[notification_timestamp])

Я предполагаю, что вы установили для компаратора значение LongType(reversed=true), что означает, что ваши уведомления будут храниться в обратном хронологическом порядке, если вы используете временные метки для имен столбцов.

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