Re[5]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 12:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:


CK>>>РСУБД по прежнему не могут в шардинг в автоматическом режиме, не могут в автоскейлинг.

G>>Что значит "шардинг в автоматическом режиме" ?
G>>Выбрать инстанс на который писать данные в зависимости от параметров — это вообще не задача СУБД, это задача клиентской библиотеки и подобный решений вагон и маленькая тележка.
C>С чего бы? А кто будет обеспечивать переходные процессы, при resharding'е или failover'у?
failover и шардинг вещи ортогональные.

G>>Автоматически перераспределить данные при появлении нового шарда — это какая из NoSQL баз умеет?

C>Все? Mongo, DynamoDB — точно.
Это с помощью middleware делается. Поверх postgres я видел аналогичную мидлварь, увы не могу вспомнить название.


G>>Автоматически поднимать новые ноды когда что-то на существующих кончается? Этим точно должен движок СУБД заниматься? И откуда свободное железо будет браться?

C>Да. Чтобы при повышении нагрузки приложение не тормозило. Новые узлы берутся из облака или пула свободных хостов (если on-premise).
Если мы говорим об облаке, то в SQL Azre есть elastic scale.
Если мы говорим про наземный вариант, то тупо проще зарезервировать мощности под СУБД.

G>>Я видел TPC-C, видел банковский процессинг, видел интернет-магазин с большой нагрузкой — везде нормализованные таблицы. Даже в stackoverflow нормализованные. Мамкин хайлоад с базой на 30 гб, где большая денормализованная таблица и джоины силами приложения, там и рядом не валялся.

C>TPC-C — это вообще смех на палочке. Я уже привёл примеры масштаба — у Амазона хранилище выдерживает миллионы запросов в секунду. Это почти на три порядка больше, чем лучший результат TPC-C.
Соре, но амазон один такой. Его пример вовсе не является оптимальным для других систем.
Re[7]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 12:31
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Здравствуйте, gandjustas, Вы писали:


g>> О каких объёмах речь?

g>> 10 миллиардов строк — 40 ТБ данных на ms sql. На ОДНОМ сервере, работает нормально. Там правда охренеть какой сторедж.
AB>Объемы HBase/Hadoop/&Co начинаются от десятков-сотен ТБ (до первого ПБ это такой игрушечный кластер на десяток-другой серверов).
Что за данные и что за задача решается?
Re[5]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 12:32
Оценка:
Здравствуйте, Слава, Вы писали:

С>Здравствуйте, gandjustas, Вы писали:


G>>В MS SQL Server есть clustered columnstore indexes. Друид и прочие "column oriented written in java" неврно курят в сторонке.

G>>И это еще "детский" уровень. Потому что у взрослых РСУБД есть в свои системы аналитики, рядом с которыми Druid выглядит как поделка.

С>С интересом выслушаю ваше мнение — зачем в Яндексе применяют Apache Cassandra.


Я понятия не имею зачем. Может просто потому что могут. Может кэш или еще что-то. Но уж точно не для хранения транзакционных данных.
Re[3]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 13:01
Оценка: 10 (5) +8 :)
Здравствуйте, Gattaka, Вы писали:

G>Я вас удивлю, но жесткий диск далеко не единственный способ оставить свои данные в сохранности. Более надежная фишка — сеть. Т.е. вместо того чтобы писать на медленный диск. Вы отправьте инфу по сети 100 нодам. Даже если 90 нод потеряет ее (что невероятно с точки зрения теории вероятности) вы сохраните информацию. Причем на 10 нодах. А не на одном паршивом диске. Скорость при этом небо и земля. Просто неспопоставимы по скорости диск и сеть. Сеть быстрее. И зачем нужен этот ваш ACID?


Ты не представляешь глубину всей глупости, которую написал.


Итак простой пример зачем нужен ACID:

Вот ты такой умный собрал систему как описал выше. Система для продажи билетов в кино\театр\еще куданить.
И внезапно одновременно два человека в разных кассах покупают билеты на одни и те же места на один и тот же сеанс.
Оба "клиента" пишут в 100 нод, 90 из которых эту инфу теряют. То есть реальная запись происходит в 10 нодах. На обоих клиентах эти 10 нод разные.
В итоге твоя система с легкостью продает два билета на одно место.

Ты получил по шапке за такую архитектуру и начал переделывать. Затребовал "кворум" при записи, чтобы 50%+1 одна нода возвращали что данные записаны. Система стала гораздо тормознее.
А все равно продаются по два билета. Потому что запись идет на 51 одну ноду, но данные читаются из остальных 49. И тут ты понял что тебе нужна атомарность (A из ACID).

Прикрутил affinity, чтобы данные одного сеанса шли на одну ноду. То есть полностью похерил всю "фишку" с сетью, но ладно, у тебя данные в памяти и все быстро, а для "надежности" у тебя все равно запись в несколько узлов\зеркал.
Но билеты все равно по два продаются. Оказывается что между чтением состояния и записью проходит время и параллельные операции могут "одновременно" прочитать что билеты не проданы, а потом записать что проданы.
Оказывается нужны констрейны и согласованность (С в ACID), чтобы такого не было.


Ну ок, собрал свой optimistic locking и WAL поверх NoSQL на каждое место (тормозит шопипец), записал в логику ограничений в "хранимые процедуры". Но все равно фигня происходит, когда параллельно пытаются купить билеты на два места, один клиент покупает 10е и 11е, а второй 11е и 10е.
То два билета на место, то дедлоки возникают. Тут ты понимаешь что тебе нужна независимость транзакций (I в ACID).


Наконец ты прикрутил транзакции поверх NoSQL. Это работает в 10 раз медленнее чем MS SQL, хотя пишется на диск не сразу. Только ноды у тебя падают, и после падения случается, что обращения происходят к ноде, которая часть записей до этого потеряла. И ты опять продаешь несколько билетов на одно место.
Когда тебя увольняют за профнепригодность, ты понимаешь что тебе изначально нужна была долговечность записи (D в ACID).

Я уже писал в одной из тем, что ACID это не прихоть инженеров, а здравый смысл людей. Ты не можешь сделать не ACID систему, если она хранит не-мусор.
Максимум что ты можешь сделать это ослабить требования ACID, там где потребитель не увидит разницы или вынести часть сложностей на другой уровень.
Отредактировано 24.07.2018 13:10 gandjustas . Предыдущая версия .
Re[11]: NoSQL победили
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.07.18 13:05
Оценка: 1 (1)
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, WolfHound, Вы писали:


C>>>Никаких распределённых транзакций, естественно, нет. Они просто нереальны при таких нагрузках.

WH>>Если их нет, то как идёт обработка ситуации что одного из нескольких товаров не оказалось на складе?
C>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.
Давай с этого места поподробнее. Как обеспечивается транзакционность счетчиков?

WH>>Часть шардов уже уменьшила счётчики, а один сказал, что товар закончился. Что делать?

WH>>Как откатить транзакцию?
C>Транзакций нет, о них можно забыть. Есть только некоторые атомарные операции, которые работают на уровне одной записи.
Атомарные операции — не транзакции?
Как атомарность дружит с твоей любимой CAP-теоремой? Чем жертвуют?
И как работает атомарность при покупке нескольких товаров? Если два клиента заказывают два товара но в разной последовательности.
Re[11]: NoSQL победили
От: paucity  
Дата: 24.07.18 13:19
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.


C>Транзакций нет, о них можно забыть. Есть только некоторые атомарные операции, которые работают на уровне одной записи.


Re[11]: NoSQL победили
От: WolfHound  
Дата: 24.07.18 14:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

WH>>Если их нет, то как идёт обработка ситуации что одного из нескольких товаров не оказалось на складе?

C>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.
Как конкретно такое не допускается если счётчики товаров лежат в разных шардах?

C>А нету ACID в РСУБД, это просто фантазии DBA, которые не видели ничего дальше БД на одной машине.

Ну на одной машине то он не одно десятилетие есть.
А имея ACID на одной машине можно легко сделать ACID на кластере.

C>>>С шардингом, репликацией, танцами с бубном, облаком супер-пупер-DBA и инженеров из Oracle. Смогли победить, лишь разрешив запись с небольшого числа узлов и переведя все остальные в read-only.

WH>>Звучит как одна база, запущенная на нескольких машинах.
WH>>А шарды это когда базу разрезают на несколько кусков.
C>Так именно так и делают. Базу режут на части, и дополнительно части хранят в нескольких экземплярах.
Что-то ты недоговариваешь. Или просто говоришь про то о чём слышал через несколько рук.
Ибо если база разрезана, то никакого взрывного роста трафика быть не может.
Ему просто взяться неоткуда.

Я ессно предполагаю, что у вас там систему не конченные идиоты делали.

WH>>Тут алгоритм распределённого консенсуса виноват.

C>Нет. Виновата необходимость сериализации транзакций.
Ох. А для сериализации транзакций нужен распределённый консенсус.
И именно старые алгоритмы распределённого консенсуса обладают свойством взрывного роста трафика.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: NoSQL победили
От: vdimas Россия  
Дата: 24.07.18 16:40
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Можешь подробнее?


По ссылке ходил?
Re[6]: NoSQL победили
От: vdimas Россия  
Дата: 24.07.18 16:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>О каких объёмах речь?

G>10 миллиардов строк — 40 ТБ данных на ms sql. На ОДНОМ сервере, работает нормально. Там правда охренеть какой сторедж.

"Одноклассники" обрабатывают в пике до миллиона запросов в секунду при объеме даных на сегодня в 50 ТБ.
Никакая РСУБД в "чистом виде" это не потянет.
Re[4]: NoSQL победили
От: vdimas Россия  
Дата: 24.07.18 16:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ну максимум что туда можно положить это лайки, посты и фотки котиков.


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

Ну вот ты делаешь запрос "дайка мне аналитику на прямо сейчас", а по факту получаешь аналичтику не на прямо сейчас, а на пол-секунды назад.
Критично?
ИМХО, нет.
Re[6]: NoSQL победили
От: vdimas Россия  
Дата: 24.07.18 16:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>Ну максимум что туда можно положить это лайки, посты и фотки котиков.

C>>Угу. И ещё сотни миллионов покупок на миллиарды долларов.
WH>То есть цена потери транзакции десяток долларов.

А есть инфа по потерянным транзакциям?


WH>При такой цене можно терять десятки транзакций каждый день и всем будет плевать.


А механизм "потери" не раскроешь?
Re[4]: NoSQL победили
От: vdimas Россия  
Дата: 24.07.18 16:54
Оценка:
Здравствуйте, WolfHound, Вы писали:

AB>>Они не теряли данные и без ACID

WH>Если нет ACID, то потеря данных вопрос времени.

Это вопрос вероятности.
Данные дублируются, живут распределённо в журналах и очередях на обработку.
РСУБД на несколько порядков чаще отказывает, чем потеряются данные в такой системе.


WH>Вот как раз монга и теряла. Брала и разваливалась.


MS SQL 6.0 тоже многократно чаще 7-ки отказывал, и?
Это вопрос конкретной реализации, а не принципа.
Re[4]: NoSQL победили
От: vdimas Россия  
Дата: 24.07.18 17:00
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Итак простой пример зачем нужен ACID:


G>Вот ты такой умный собрал систему как описал выше. Система для продажи билетов в кино\театр\еще куданить.

G>И внезапно одновременно два человека в разных кассах покупают билеты на одни и те же места на один и тот же сеанс.
G>Оба "клиента" пишут в 100 нод, 90 из которых эту инфу теряют. То есть реальная запись происходит в 10 нодах. На обоих клиентах эти 10 нод разные.
G>В итоге твоя система с легкостью продает два билета на одно место.

Не продаёт.
Такие операции работают через подтверждение, т.е. максимум что страшного можеть случиться — две операции будут поставлены в очередь на обработку, хотя одну из них можно было в очередь превентивно не ставить. Ну и потом, кто будет второй, тому придёт отлуп "ай нет, сорри, все-таки уже продали билеты".

Отлуп придёт до списывания денег со счёта, ес-но.

На очередях прекрасно можно реализовать ACID, не лоча при этом единовременно все сущности.
Собсно, суть всех lock-free алгоритмов примерно такая же.

В этом смысле РСУБД обеспечивает столкновение на условных мьютексах, а система с очередями — на условных "неподвижных точках", которые крутятся вокруг некоего прикладного условия.
Отредактировано 24.07.2018 17:02 vdimas . Предыдущая версия .
Re[5]: NoSQL победили
От: Sharov Россия  
Дата: 24.07.18 17:35
Оценка:
Здравствуйте, vdimas, Вы писали:

V>На очередях прекрасно можно реализовать ACID, не лоча при этом единовременно все сущности.


Типа что-то паттерна saga.

V>Собсно, суть всех lock-free алгоритмов примерно такая же.


Это глупость. Это все равно что сказать что суть lock-free в однопоточности. Т.е. у нас один поток, поэтому lock-free. Суть lock-free иная.
Кодом людям нужно помогать!
Re[8]: NoSQL победили
От: Anton Batenev Россия https://github.com/abbat
Дата: 24.07.18 17:49
Оценка:
Здравствуйте, gandjustas, Вы писали:

g> AB>Объемы HBase/Hadoop/&Co начинаются от десятков-сотен ТБ (до первого ПБ это такой игрушечный кластер на десяток-другой серверов).

g> Что за данные и что за задача решается?

Ну... Каждый использующий решает свои задачи — стек Hadoop достаточно развесист в плане компонентов и их возможных комбинаций, по этому число решаемых задач может быть очень велико. Цитата: "Поисковые логи и индексы, пользовательские данные, картографическая информация, промежуточные данные и результаты алгоритмов машинного обучения — все это может занимать сотни петабайт дискового пространства." (это про YT, но для обсуждаемого вопроса не принципиально).
Re[4]: NoSQL победили
От: chaotic-kotik  
Дата: 24.07.18 18:22
Оценка: 1 (1)
Здравствуйте, gandjustas, Вы писали:

G>Что значит "шардинг в автоматическом режиме" ?


это когда шарды перемещаются на новые ноды в автоматическом режиме

G>Что значит "автоскейлинг" ?

G>Автоматически поднимать новые ноды когда что-то на существующих кончается? Этим точно должен движок СУБД заниматься? И откуда свободное железо будет браться?

NoSQL базы легко масштабируются (ваш кэп), обычно автоскейлинг работает так, пишем скрипт, который по ряду параметров (load average, latency) решает что ресурсов мало и разворачивает новые инстансы, после чего указывает субд на них. то же самое делается для даунскейлинга. С EC2 + CloudWatch это все довольно тривиально. Попробуй сделать что-то похожее со своей РСУБД.

Нормальная NoSQL СУБД это cattle, инстансы там могут появляться/исчезать довольно легко, большинство РСУБД это pets.

G>Ты вместо маркетиногового булшита приводи реальные сценарии использования. Окажется что единственный реальный сценарий для NoSQL это "положить данные и взять по ключу без гарантий записи на диск". То есть кэш.


с чего ты взял что нет гарантии записи на диск?

G>Я видел TPC-C, видел банковский процессинг, видел интернет-магазин с большой нагрузкой — везде нормализованные таблицы. Даже в stackoverflow нормализованные. Мамкин хайлоад с базой на 30 гб, где большая денормализованная таблица и джоины силами приложения, там и рядом не валялся.


я видел веб проект с милионной аудиторией на РСУБД, где база использовалась именно так
Re[4]: NoSQL победили
От: chaotic-kotik  
Дата: 24.07.18 18:36
Оценка: 7 (3) +1
Здравствуйте, gandjustas, Вы писали:

G>Ты не представляешь глубину всей глупости, которую написал.


фи

G>Итак простой пример зачем нужен ACID:


G>Вот ты такой умный собрал систему как описал выше. Система для продажи билетов в кино\театр\еще куданить.

G>И внезапно одновременно два человека в разных кассах покупают билеты на одни и те же места на один и тот же сеанс.
G>Оба "клиента" пишут в 100 нод, 90 из которых эту инфу теряют. То есть реальная запись происходит в 10 нодах. На обоих клиентах эти 10 нод разные.
G>В итоге твоя система с легкостью продает два билета на одно место.

G>Ты получил по шапке за такую архитектуру и начал переделывать. Затребовал "кворум" при записи, чтобы 50%+1 одна нода возвращали что данные записаны. Система стала гораздо тормознее.

G>А все равно продаются по два билета. Потому что запись идет на 51 одну ноду, но данные читаются из остальных 49. И тут ты понял что тебе нужна атомарность (A из ACID).

Есть такая штука, consistent read называется. Система гоняет кворум не только на запись но и на чтение. И BTW, у тебя данные будут храниться не на всех нодах а на %replication-factor% нодах (на пяти например), поэтому кворум ты будешь гонять не между всеми нодами а только между пятью.
Re[5]: NoSQL победили
От: Sharov Россия  
Дата: 24.07.18 18:44
Оценка:
Здравствуйте, chaotic-kotik, Вы писали:


CK> после чего указывает субд на них. то же самое делается для даунскейлинга.


Это как -- на шардах указывает субд, или субд указывает на шарды?
Кодом людям нужно помогать!
Re[6]: NoSQL победили
От: Cyberax Марс  
Дата: 24.07.18 18:49
Оценка:
Здравствуйте, Sharov, Вы писали:

C>>Amazon использует nosql везде, Google их использует ещё более везде.

S>Не совсем чтобы везде, но да, скорее Ваша правда.
S>(я вопрос тут задал. Очень крутой дядька)
Да, для Data Warehousing и аналитики используется SQL, но это всё не online даже близко.
Sapienti sat!
Re[12]: NoSQL победили
От: Cyberax Марс  
Дата: 24.07.18 19:48
Оценка:
Здравствуйте, WolfHound, Вы писали:

C>>Такого не допускается. Счётчики товара строго транзакционны. То как оно обеспечивается — отдельная и длинная история.

WH>Как конкретно такое не допускается если счётчики товаров лежат в разных шардах?
С помощью идемпотентных изменений. Чем-то напоминает транзакции, да.

C>>А нету ACID в РСУБД, это просто фантазии DBA, которые не видели ничего дальше БД на одной машине.

WH>Ну на одной машине то он не одно десятилетие есть.
WH>А имея ACID на одной машине можно легко сделать ACID на кластере.
Отсюда подробнее, пжалуста. Я зааааписываю.

C>>Так именно так и делают. Базу режут на части, и дополнительно части хранят в нескольких экземплярах.

WH>Что-то ты недоговариваешь. Или просто говоришь про то о чём слышал через несколько рук.
WH>Ибо если база разрезана, то никакого взрывного роста трафика быть не может.
WH>Ему просто взяться неоткуда.
Проблема в том, что при классических распределённых транзакциях блокировки должны проходить через центральный узел (который умрёт) или будут требоваться оптимистические блокировки с повторами (привет экспоненте).

C>>Нет. Виновата необходимость сериализации транзакций.

WH>Ох. А для сериализации транзакций нужен распределённый консенсус.
WH>И именно старые алгоритмы распределённого консенсуса обладают свойством взрывного роста трафика.
Проблема с консенсусом в том, что он должен запускаться при чтении, а не записи. Соответственно, это слишком дорого.
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.