В чем разница между путем чтения scylla и путем чтения cassandra? - PullRequest
3 голосов
/ 10 января 2020

В чем разница между путем чтения Сциллы и путем чтения Кассандры? Когда я подчеркиваю Cassandra и Scylla, тогда производительность чтения Scylla в 5 раз ниже, чем у Cassandra с 16-ядерным и обычным жесткими дисками.

Я ожидаю лучшей производительности чтения на Scylla по сравнению с Cassandra с обычным жестким диском, потому что моя компания не предоставляет SSD.

Может кто-нибудь подтвердить, возможно ли добиться лучшей производительности чтения при использовании обычного жесткого диска или нет?

Если да, какие изменения потребуются в конфигурации scylla ?. Пожалуйста, ведите меня!

Ответы [ 5 ]

3 голосов
/ 10 января 2020

Могут быть различные причины, по которым вы не получаете максимальную отдачу от своего кластера Scylla.

  1. Количество одновременных подключений от ваших клиентов / загрузчиков недостаточно велико, или вы ' не использовать достаточное количество погрузчиков. В этом случае некоторые осколки будут выполнять всю работу, в то время как другие будут в основном бездействовать. Вы хотите поддерживать высокий уровень параллелизма.

  2. У лайков Сциллы минимум 2 соединения на шард (вы можете увидеть количество шардов в /etc/scylla.d/cpuset.conf)

  3. Каков размер вашего набора данных? Вы читаете большое количество разделов или только несколько? Вы можете столкнуться с ситуацией с горячими разделами

Я настоятельно рекомендую прочитать следующие документы, которые предоставят вам больше информации:

2 голосов
/ 23 января 2020

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

Производительность некэшированного чтения на жестких дисках неизбежно будет низкой как у Cassandra, так и у Scylla, потому что чтение для каждого диска требуется несколько поисков на жестком диске, и даже лучший жесткий диск не может выполнить больше, чем, скажем, 200 таких поисков в секунду. Даже с RAID нескольких из этих дисков вы редко сможете выполнять, скажем, более 1000 запросов в секунду. Поскольку современный многоядерный процессор может выполнять на несколько порядков больше процессорной работы, чем 1000 запросов в секунду, в случаях как Сциллы, так и Кассандры вы, скорее всего, увидите свободный процессор. Таким образом, основное преимущество Scylla, заключающееся в использовании гораздо меньшего количества ЦП на запрос, даже не имеет значения, когда диск является узким местом в производительности. В таких случаях я ожидаю, что производительность Сциллы и Кассандры (я предполагаю, что вы измеряете пропускную способность, когда говорите о производительности?) Должна быть примерно одинаковой.

Если, тем не менее, вы видите лучшую пропускную способность от Кассандра, чем Сцилла, есть несколько деталей, которые могут объяснить, почему, помимо общих проблем неправильной конфигурации клиента, поднятых в других ответах:

  1. Если у вас низкие суммы из данные, которые могут поместиться в памяти, политика кэширования Cassandra лучше для вашей рабочей нагрузки. Cassandra использует кеш страниц ОС, который читает целые страницы диска и может кэшировать несколько элементов за одно чтение, а также несколько записей индекса. В то время как Scylla работает по-разному и имеет кеш строк - только кеширует данные чтения c. Кэширование Scylla лучше для больших объемов данных, которые не помещаются в памяти, но гораздо хуже, когда данные могут помещаться в памяти, пока весь набор данных не будет кэширован (после того, как все будет кэшировано, оно снова станет очень эффективным).

  2. На жестких дисках детали сжатия очень важны для производительности чтения - если в одной настройке у вас есть больше sstables для чтения, это может увеличить количество операций чтения и снизить производительность. Это может измениться в зависимости от вашей конфигурации уплотнения или даже случайно (в зависимости от того, когда уплотнение запускалось в последний раз). Вы можете проверить, объясняет ли это ваши проблемы с производительностью, выполнив основное сжатие («nodetool compact») в обеих системах и проверив производительность чтения после этого. Вы можете переключить стратегию сжатия на LCS, чтобы обеспечить лучшую производительность чтения с произвольным доступом за счет увеличения объема работы по записи (на жестких дисках это может быть полезным компромиссом).

  3. Если вы измеряете производительность сканирования (читаете всю таблицу), а не читаете отдельные строки, возникают другие проблемы: как вы, возможно, слышали, Scylla подразделяет каждый узел на сегменты (каждый фрагмент представляет собой один процессор). Это фантастика c для работы с ограниченным ЦП, но может быть хуже для сканирования небольших таблиц, поскольку теперь каждый sstable меньше и количество смежных данных, которые вы можете прочитать, прежде чем искать снова, меньше.

Я не знаю, какое из этих различий - или что-то еще - приводит к снижению производительности вашего варианта использования в Scylla, но я прошу иметь в виду, что все, что вы исправите, ваше производительность всегда будет плохой с жесткими дисками. С помощью SDD в прошлом мы измеряли более миллиона запросов чтения с произвольным доступом в секунду на одном узле. Жесткие диски не могут приблизиться. Если вам действительно нужна оптимальная производительность или производительность за доллар, SDD - это действительно путь к go.

2 голосов
/ 11 января 2020

@ Satee sh, я хочу добавить к ответу @TomerSan, что и Cassandra, и ScyllaDB используют одну и ту же архитектуру дискового хранилища ( LSM ). Это означает, что они имеют относительно одинаковые шаблоны доступа к диску, поскольку алгоритмы в основном одинаковы. Деревья LSM были созданы с учетом того, что нет необходимости делать мгновенные обновления на месте. Он состоит из неизменных блоков данных, которые представляют собой большие непрерывные фрагменты данных на диске. Это означает, что меньше случайного ввода-вывода, более последовательного ввода-вывода, для которого жесткий диск отлично работает (не считая использованного параллелизма в современных реализациях баз данных).

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

Чтобы иметь возможность сказать что-либо конкретное c, пожалуйста, поделитесь своими тестами, envs и конфигурациями.

1 голос
/ 11 января 2020

Обе базы данных используют дерево LSM, но Scylla имеет архитектуру «поток на ядро» сверху, плюс мы используем O_Direct, а C* использует кеш страниц. Scylla также имеет сложный планировщик ввода-вывода, который не перегружает диск и, таким образом, scylla_setup автоматически запускает тест для настройки. Проверьте свои выходные данные в io.conf.

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

0 голосов
/ 17 января 2020

В качестве резюме я бы сказал, что Scylladb и cassandra имеют одинаковый путь чтения / записи memtable, commitlog, sstable.

Однако реализация сильно отличается: - Cassandra полагаются на ОС для низкоуровневого ввода-вывода и сети (большинство СУБД) - scylladb полагается на свою собственную библиотеку (seastar) для обработки операций ввода-вывода и сети на низком уровне независимо от кэша страницы ОС и т. Д. c. Вот почему они могут предоставлять такие функции, как планирование рабочей нагрузки в одном кластере, которые было бы очень трудно реализовать в cassandra.

...