2012-03-13 2 views
2

Простите меня за то, что вы, возможно, объяснили в другом месте, но у меня возникла проблема с созданием модели данных в Кассандре.Подход к модели данных Cassandra

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

Мне не удалось найти ресурс, объясняющий, как это сделать. Мои первоначальные мысли связаны с наличием нескольких CF - транзакций CF, ключевого словаtransaction CF, source_transaction CF и возможного day_transaction CF (или чего-то подобного). Это сделало бы очень прямой поиск транзакций на основе любого из перечисленных выше элементов, но похоже, что это не позволит мне искать все вышеперечисленные элементы.

Любые мысли?

ответ

3

Начните с рассмотрения вашего запроса, а затем в вашей модели данных. Прочитайте here и here как эту помощь при планировании своей модели данных.

cf : transactions 
rowkey : source/uuid (suggestion) 
    cn : source 
    cv : UTF8 
    cn : keyword 
    cv : UTF8 
    cn : date 
    cv : DateType 
    cn : time 
    cv : DateType 


cf : keywords 
rowkey : keyword 
    cn : source 
    cv : UTF8 

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

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

  • получить все сделки, где источник равно «»
     
        get transactions where source = '' 
    
  • получить все сделки, где источник равно «» и даты> ' '
     
        get transactions where source = '' and date > ''; 
    
  • получить все сделки на дату х
     
        get transactions where date = ''; 
    
  • получить все название источника, основанный на ключевое слово
     
        get keywords['keyword']; 
    
+0

Я пришел сюда, чтобы задать аналогичный вопрос, я также пришел к этому решению, но я не удовлетворен этим из-за случайных ссылок на «горячие точки», где вы могли получать много данных из одного " source ", и поскольку это ключ раздела, все данные будут поступать на один узел. Мне было интересно, можно ли этого избежать, не теряя при этом возможности делать запросы типа «source = 'foo» и time> t0 и time

+0

Этот вопрос, заданный OP, произошел совсем недавно, даже кассандра-кли выше не в пользу с этого момента. Метод предпочтения будет использоваться через cqlsh. При этом я не знаю, как вы получаете впечатление от точки доступа, если вы хотите, чтобы данные хранились на другом сервере, попробуйте немного изменить ключ, например. key1 || foo, key1 || bar, так что хеширование будет отличаться и thsu хранить на другом сервере? Но у нас есть данные о производстве с нагрузкой каждого узла около 300-400 ГБ. Hotspot? Я даже не замечаю и не беспокоюсь об этом, пока вы не упомянули об этом. – Jasonw

+0

Я упоминал cqlsh только сейчас, поэтому вы должны проверить cql spec 3.0 и дальше с этого момента, cassandra version 1.2 и 2.0 вперед улучшают тенденцию к поддержке cql. попробуйте прочитать http://cassandra.apache.org/doc/cql3/CQL.html и http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0. Я не знаю вашего точного вопроса, но надеюсь, вы получите идею, основанную на моих комментариях, и вы можете двигаться вперед. – Jasonw

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