Последствия ввода / вывода при использовании очень широких рядов в Кассандре - PullRequest
2 голосов
/ 24 февраля 2012

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

Чтобы прояснить, что я пытаюсь сделать, я по сути хочу отследить, к какому домену принадлежит и IP. Один из способов, по которому я думал об этом, - это иметь ряд клавиш типа «google.com», и каждый столбец в строке - это IP-адрес, принадлежащий указанному домену. Кто-то сказал мне, что если ваш столбец очень широкий и вы его измените, то он создаст большое количество операций ввода-вывода, так как в какой-то момент b / c данные должны быть практически перезаписаны, данные неизменны. Это правильно? Я думал, что Кассандра просто запишет измененные данные и только измененные данные в журнал фиксации и в таблицу. Затем, когда данные сбрасываются и происходит сжатие, данные объединяются в новый SSTable для семейства столбцов.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

Широкие строки часто используются для данных временных рядов и не должны быть проблемой в целом. Каждая строка должна соответствовать одному узлу (машине) - см. http://wiki.apache.org/cassandra/CassandraLimitations

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

Вы правы в отношении процесса commitlog / memtable-> SSTable, но смотрите этот поток , в котором упоминается, что сжатие может быть медленнее из-за in_memory_compaction_limit_in_mb - но с тех пор произошли некоторые изменения в сжатии было написано, и это может быть устаревшей информацией.

0 голосов
/ 10 сентября 2012

Вы всегда можете использовать playOrm, который делает широкие строки для вас, и тогда вы можете просто сделать S-SQL (масштабируемый SQL). Вам просто нужно правильно разделить данные, чтобы сделать S-SQL. Как правило, разделы выполняются заказчиком или по времени и т. Д. И т. Д. (Вы можете выполнять объединения и все остальное в рамках разделов).

...