2012-03-06 3 views
1

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

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

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

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

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

    anna : {...} 

    ... 
} 

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

Том

ответ

4

Я предполагаю, что «уведомление» ваш 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), означает, что Ваши уведомления будут храниться в обратном хронологическом порядке если вы используете временные метки для имен столбцов.

+0

это отличный совет! спасибо – tomekkup

+0

хм ... У меня есть еще один вопрос: безопасно ли использовать Long в качестве типа столбца в этой утилите? Теоретически возможно создавать повторяющиеся имена столбцов. Я работаю с Hector & Java и генерирую время с помощью System.currentTimeInMillis(). Конечно, я могу перейти на TimeUUID, но не уверен, что мне нужно. – tomekkup

+0

Да, если вы беспокоитесь о столкновениях, вместо этого используйте TimeUUID. Это будет работать отлично. –

Смежные вопросы