Я тестирую cql/cassandra 1.2 и библиотеку python-cql на vm с 2GB RAM. У меня есть таблица с составным индексом (широкая строка). При выполнении запросов к одному узлу я получаю примерно 10-кратное снижение производительности, чем mysql. Запросы серийны без параллелизма, но меня интересует скорость одного запроса.cassandra wide row column slice performance
- Самое главное, могу ли я что-нибудь сделать, чтобы оптимизировать запросы по широким строкам (в частности, этот запрос)?
- Являются ли эти цифры отражающими производительность cassandra против mysql в ситуации с одним запросом?
- Может ли мой ограниченный ram/vm сделать это большой разницей?
- Будет ли многоузловая кассандра/разбитая mysql быть ближе, чем 10x?
- Я делаю что-то ужасно неправильно? Код
Тест:
"""
CREATE TABLE foo_bars (
foo_id text,
bar_id bigint,
content text,
PRIMARY KEY (foo_id, bar_id)
)
WITH CLUSTERING ORDER BY (bar_id DESC);
"""
#content is up to 64k text and te number of bar columns in a foo row will be ever growing but will probably never reach over 2million
t1 = time.time()
for i in range(1, 1000):
sql_query = "SELECT * FROM foo_bars WHERE foo_id IN(%s) ORDER BY id DESC LIMIT 40" % random_foo_ids
result = db_cursor.execute(sql_query)
t2 = time.time()
print "Sql time = %s" % str(t2 - t1)
t1 = time.time()
for i in range(1, 1000):
cql_query = "SELECT * FROM foo_bars WHERE foo_id IN(%s) LIMIT 40" % radom_foo_ids
result = cassandra_cursor.execute(cql_query)
t2 = time.time()
print "Cql time = %s" % str(t2 - t1)
Sql time = 4.2
Cql time = 58.7
Заранее спасибо!
Насколько велика ваша семейство колонок? Наилучшим показателем является выход используемого пространства памяти nodetool cfstats (live). – Richard
* Пространство, используемое (живой): 31749778 * Пространство, используемое (всего): 31749778 * Уплотненная строка Минимального размер: 447 \t \t * Уплотненный строк Максимального размер: 654949 \t \t * Уплотненные строки среднего размера: 68740 – user2537952
Это 31 МБ, поэтому он легко вписывается в кеш. Тогда это не может быть связано с памятью. Это может быть просто, что латентность чтения Кассандры выше, чем для MySQL. Однако пропускная способность может быть выше, но для этого вам потребуется параллелизм. – Richard