LINUX.ORG.RU

Встречайте ScyllaDB (переписанную на С++ Apache Cassandra)

 , ,


8

5

На Cassandra Summit, Avi Kivity и Dor Laor (создатели KVM и OSv) объявили о создании ScyllaDB — открытой реализации Apache Cassandra на C++

По утверждению авторов, пропускная способность на ноду у ScyllaDB в 10 раз выше чем у оригинального кода на Java, со временем отклика не превышающим 1мс на 99% запросов.

Они также получили 1 миллион транзакций в секунду на одной ноде.

>>> Подробности

🤡🤡🤡

Проверено: maxcom ()
Последнее исправление: ymn (всего исправлений: 7)
Ответ на: комментарий от shahid

Если нужна вся история изменений, то запили отдельную модель с историей изменений — всё как и везде.

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

anonymous
()
Ответ на: комментарий от anonymous

как я смогу это сделать в обычном SQL

В RDBMS не бывает split-brain? А мужики-то не знают... Транзакции в wall-log'ах просто облегчат разруливание, сути это не меняет.

shahid
()
Последнее исправление: shahid (всего исправлений: 1)
Ответ на: комментарий от shahid

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

anonymous
()
Ответ на: комментарий от shahid

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

anonymous
()
Ответ на: комментарий от anonymous

Тут у нас получаются плоские костыли, а там у нас будут закруглённые костыли с квадратными ручками.

Fixed.

Решение проблем split-brain — это комплексная задача, очень сильно зависит от обстоятельств, ценности информации и имеющихся ресурсов.

shahid
()
Ответ на: комментарий от anonymous

Идеальных решений не бывает. А проблемы все решаемы. Шардинг с event-consistency требует соответствующих решений со стороны программиста, в т.ч. денормализацию некоторых моделей.

shahid
()
Ответ на: комментарий от shahid

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

anonymous
()
Ответ на: комментарий от shahid

но разговоры про рассинхронизацию это случай хранения нескольких копий ключа, а так же интересует база с автошардингом и атомарным изменением ключа (select for update либо CAS) с одной копией ключа (без всех этих спец эффектов).

anonymous
()

пропускная способность на ноду у ScyllaDB в 10 раз выше чем у оригинального кода на Java

Не верю! Это как нужно было тяп ляп писать этот ScyllaDB чтобы скорость увеличилась всего лишь в 10 раз.

anonymous
()
Ответ на: комментарий от anonymous

Автомёржа на уровне elasticsearch не было и не будет. Это практически везде так, т.к. вообще не ясно, как это должно происходить.

В случае наступления split-brain на elasticsearch нужно отказаться от части изменений на части узлов, а потом снова выпавшие ноды подключить к оставшемуся кластеру. (systemctl restart elasticsearch). Всё остальное запиливается на собственное усмотрение.

shahid
()
Ответ на: комментарий от shahid

я спрашиваю вообще не только про cassandra и elasticsearch, возможно есть что-то еще. riak например или еще что-то.

anonymous
()
Ответ на: комментарий от anonymous

riak

Когда тыкал палочкой, там всё было печально в целом.

возможно есть что-то еще

Автоматом оперативно выявлять split-brain, предотвращать возникновение конфликтующих изменений на уровне DNS и nginx, направляя все запросы в какой-то один дата-центр или возвращать клиентам ошибки на время фейловера, ну и т.д.

shahid
()
Ответ на: комментарий от shahid

ну а без многих копий ключа (без split-brain), но с шардингом и атомарным «прочитал ключ, записал ключ»? что самое быстрое и надежное?

anonymous
()
Ответ на: комментарий от shahid

Если нужна масштабируемая NoSQL СУБД с поиском — посмотрите в сторону elasticsearch. Пожалуй, что-то лучше найти сегодня нельзя. Ну или стать бета-тестером сабжа.

elasticsearch сосёт с причмоком на частой записи. И гарантии по консистентности у него на уровне плинтуса. read-your-writes, linearizable reads and writes, eventual consistent counters - нет не слышали. Вообще эластик и кассандра для совсем разных вещей сделаны, их сравнивать некорректно.

migesok
()
Ответ на: комментарий от DiKeert

Кассандра это когда я записываю данные в один data center, а в соседнем через несколько секунд/минут получаю repeatable read-ы этих данных не парясь вообще

В общем случае без paxos - repeatable read никто не гарантирует, сюрприз.

migesok
()
Ответ на: комментарий от anonymous

Числоконцепты

Те жаба годна только для концептов?

Неверный вывод. Скорее «пригодность Java для числодробилок не очевидна». Подавляющее большинство программ никогда не растут до числодробильных объёмов и задач Cassandr'ы.

Camel ☕☕☕
()
Ответ на: комментарий от shahid

И чем оно в итоге отличается от elasticsearch? Ну кроме убогой архитектуры, зоопарка равноубогих java-клиентов и кучи by-design косяков. Зато можно перебирать ключи по порядку. Но стоит ли оно того?

Первая проблема, что вспомнил: Эластик не умеет разделять шарды, поэтому масштабирование ограничивается заранее заданным при создании индекса кол-вом шардов. При этом если заранее создать много шардов, то деградирует производительность. Их в идеале должно быть не больше пары-тройки на машину. В итоге эластик машстабируется без пересоздания индексов максимум на начальное кол-во машин * 4.

migesok
()
Ответ на: Числоконцепты от Camel

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

anonymous
()

По теме консистентности кассандры и эластика можно глянуть чумовые посты от aphyr:

И вся серия: https://aphyr.com/tags/jepsen

Там этот парень поясняет про модели консистентности, мучает много разных распределённых БД split-brain'ами и проверяет, что становится с данными.

migesok
()
Ответ на: комментарий от EXL

Вопрос, насколько стабильна эта реализация.
C++
стабильность

Pick one. Нет, серьезно, писать серверное ПО на крестах то еще изщвращение, я считаю. ИМХО, на крестах десктопное ПО и игры писать самое то, но никак не сервера.

cherry-pick
()
Ответ на: комментарий от dib2

Быстрота кода зависит по большей части от прокладки между стулом и клавиатурой. JVM умеет в JIT, когда в компилируемых языках/плоатформах тебе надо выбирать между «оптимизировать исполняемый файл под определенный CPU» и «чтобы оно везде работало». Естественно, JVM оверхеад добавляет, особенно по памяти, но на крестах легче набыдлокодить так, что память течь будет.

cherry-pick
()
Ответ на: комментарий от EXL

Вопрос, насколько стабильна эта реализация.

пока только бета, но мужики там с руками, нормальные

shty
()
Ответ на: комментарий от maxcom

Не очень понятно все ли функции поддерживаются.

пока там еще много yet to be implemented

shty
()
Ответ на: комментарий от umren

Странно, что плюсы выбрали.

какие альтернативы предложит благородный дон?

shty
()
Ответ на: комментарий от shahid

Зато можно перебирать ключи по порядку.

можно подумать в ES нельзя ))

shty
()
Ответ на: комментарий от migesok

elasticsearch сосёт с причмоком на частой записи.

ко-ко-ко

И гарантии по консистентности у него на уровне плинтуса.

это есть такое

shty
()
Ответ на: комментарий от migesok

плюсую, отличные посты, всем рекомендуется прочитать, но без фанатизма, задачи там синтетические достаточно

shty
()
Ответ на: комментарий от umren

«CPL.1: Prefer C++ to C» Дальше можно не читать (c) в соседнем топике... Типа они тоже прочитали досюда.

slackwarrior 😊😊😊
()
Ответ на: комментарий от migesok

Ну paxos в ней имплементирован и можно включить. Ну и кворум обычно практически означает repeatable read-ы. Все равно, если твоя система распределенна (а с кэсси она распределенна), значит тебе пора биться над тем, что бы она была идемпотентна.

DiKeert
()
Ответ на: комментарий от cherry-pick

о, а вот и диванная самка приблудилась в тред. всем тихо слухать

anonymous
()
Ответ на: комментарий от Nagwal

Интересно, почему на плюсах, а не каком нибудь новомодном Go?

Очевидно потому, что для этой задачи Go подходит хуже, чем C++. Странно, что ты не спросил «почему изначально на Java писали?», но это, видимо, немодный ныне наброс, хотя и на него есть рациональный ответ.

anonymous
()
Ответ на: комментарий от anonymous

Не верю! Это как нужно было тяп ляп писать этот ScyllaDB чтобы скорость увеличилась всего лишь в 10 раз.

В 5 раз быстрее стало из-за сетевого стека в юзерспейсе, ещё в 2 раза - из-за отсутствующих затыков на сборку мусора.

mv
()

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

f1xmAn
()
Ответ на: комментарий от cherry-pick

С монгой я работал меньше, чем с тарантулом. А чем мыло.ру не угодили? Я там работал, там очень крутые спецы тусуются, в том числе в отделе разработки тарантула.

DELIRIUM
()
Ответ на: комментарий от shahid

Даже если сабж будет падать, это уже не так страшно

Да, лишь бы плюсоидам кость кинули

cdshines
()

открытой реализации Apache Cassandra на C++

И это хорошо.

MrClon
()

Они также получили 1 миллион транзакций в секунду на одной ноде.

Готов поспорить что in-memory дергали парочку ключей

vertexua
()
Ответ на: комментарий от kep

Естественно, что треш будет работать в разы быстрее, если его переписывать

Fixed, это называется редизайн и разработка более современного софта

vertexua
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.