2013-04-01 4 views
1

Я пытаюсь создать модель данных в cassandra для данных CDR (записи данных о вызовах), чтобы мы могли хранить и продолжать добавлять детали вызова в одну строку одного и того же мобильного номера или набор столбцы динамически добавляются для каждого вызова одним и тем же номером мобильной связи. Также он может поддерживать запросы, например, , какой мобильный номер. максимальное время между двумя заданными датами или заданным временем (например, между 9AM и 7PM)?моделирование данных в cassandra для данных CDR

Ваши предложения очень заметны. Заранее спасибо.

ответ

2

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

Из-за нереляционной природы Cassandra и ограниченных возможностей запросов CQL (по сравнению с традиционным RDS) дизайн базы данных во многом определяется запросами, которые необходимо выполнить. На основе ваших примеров вам, вероятно, понадобится несколько семейств столбцов для удовлетворения этих запросов.

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

CDR_column_family 
    mobile_number <- row key 
     timestamp:null <- column name:column value 

Что вам нужно, чтобы следить за тем, насколько широкими могут быть ряды. Если вы имеете дело с нечетным звонком каждый день, тогда этого может быть достаточно, но если он больше напоминает сотни вызовов каждый день, вы можете захотеть очертить данные, чтобы не ухудшить производительность. Таким образом, ваш ключ строки может стать составным номером месяца/месяца (например, «07870 831137: 201304»), и вы будете иметь строку на номер мобильного телефона в месяц.

Этот CF будет удовлетворять запросам типа «сколько звонков было сделано до 07870 831137 между 9AM и 7PM», но он не скажет вам, «какой номер был назван наиболее важным между 9AM и 7PM», без запроса каждой отдельной строки в CF (что в распределенной базе данных не будет особенно эффективным).

Для запроса типа «номер которого больше всего между 9AM и 7PM», я бы рассмотрел второй CF, который будет перечислять все вызовы, которые были сделаны в хронологическом порядке.

CallIndex_column_family 
    month <- row key 
     timestamp:mobile_number <- column name:column value 

Таким образом, каждый раз, когда вы пишите в CDR CF, вы бы также добавить новый столбец в CallIndex CF, перечисляя время вызова и набранный номер. Затем вы можете запросить CallIndex CF для всех столбцов между двумя диапазонами даты/времени и проанализировать результаты, чтобы получить номер, который был вызван больше всего.

+0

Благодарим за подробное описание, это помогает мне в правильном направлении. – adityak

+0

Я не уверен в этой функции, то есть мы можем добавлять множество столбцов в строку повторно в разное время? пожалуйста, дайте свое мнение. – adityak

+0

, но в CDR_column_family, если мы рассматриваем моб. нет. как строковый ключ, тогда число строк будет очень высоким (например, в Индии около 960 миллионов подписчиков, поэтому число строк будет 960 миллионов). так что это может привести к низкой производительности. – adityak

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