2013-02-27 3 views
2

Я хочу разработать схему Cassandra для моего шкала:Cassandra схема для сроков

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

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

Я оцениваю, что каждый пользователь будет иметь 10000 объектов временной шкалы, и что у меня будет 10000 пользователей, поэтому у меня будет 100 000 000 объектов. Это означает, что скорость очень важна.

Это код, который я использовал, правильно?

$pool = new ConnectionPool('Keyspace', array('127.0.0.1')); 
$cf = new ColumnFamily($pool, 'timeline'); 

// Insert a few records 
$columns = array(microtime() => "event1", microtime() => "event2", microtime() => "event3", microtime() => "event4"); 
$cf->insert('usera', $columns); 

ответ

2

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

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

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

+0

Привет, спасибо за ответ, как я могу сделать раздел строк? – Ata

+0

Привет, Вы можете увидеть эту ссылку и сказать мою проблему: http://pastebin.com/fwJksrat – Ata

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