LINUX.ORG.RU

Вопрос про дилемму в разработке систем хранения данных. По какому пути пойти? СУБД, таблицы, C++, треш, угар.

 


1

3

Сложно-философский вопрос. Не будем рассматривать транзакции и какую-либо связь между таблицами, то есть не будет слова «реляционные (нет реляций между)». Рассмотрим просто таблицу. Таблица - набор строк, каждая строка - набор строго типизированных колонок. Хранит данные - построчно или поколоночно - неважно - зависит от задачи чтения. Главное, что таблица.

Утверждение: в форму таблицы впихивается очень существенное число разных данных. А которые не впихиваются - впихиваются при допиле движка таблиц специальными хаками, но остаётся внешне таблицей. Например мы хотим хранить key:string=[множество-uint64]. Возможно для какой-то задачи, оптимально будет сохранить и на диске и в памяти структуру данных вида (key_len, key, потом тупо последовательность всех uint64 отсортированных). И рядом хеш-табличку по key возможно. Но если бы мы записывали это в таблицу, у нас бы было N число строк вида (key, uint64), где N - число разных uint64, а key бы повторялся. Сходу это выглядит неоптимальным, потому что кучу раз key повторили, но умная таблица не будет хранить повторяющиеся key и получится так же оптимально, как в наивном подходе и расположит всю таблицу прямо как в примере выше - не как последовательность кортежей (SEE_PREV_VALUE, uint64), а прям как один список (uint64, uint64, …., uint64). Я ж говорю - с хаками, но таблица.

А теперь вопрос. Предположим вы бекенд-C++-тимлид в каком-то инновационном банке (которому не жалко рискнуть наняв вас, а не поставив везде Oracle) или в каких-нибудь там одноклассниках или в гугло-яндексе. Тут давайте не будем вспоминать, что в этих организациях реально используется или говорить, что все они давно закоренели и там таких опытов не ставят, а работает YDB - пытаюсь показать масштаб.

  1. Предположим у вас есть C++ фреймворк, куда входит сетевой код принятия запросов (протокол-буфферс, например), какой-то движок хранения данных произвольного формата в файлах, код записи-воспроизвдеения WAL, код репликации, код статистики… И этот фреймворк позволяет за 20 минут под нужный формат данных наклепать на коленке новую «СУБД», написав буквально какой-то std::unordered_set в функции main() и «завернув» этот контейнер в данный фреймворк, выдав к нему доступ из сети и сериализацию/десериализацию на диск целиком и запись в WAL и т.п. То есть, к вам приходят люди, которые хотят хранить key=value, вы оформляете им новую «СУБД» с 2 методами - set и get и катите на прод, все юзают, все счастливы. Приходят другие люди, хотят по 64-битному числу хранить множество из миллиона других 64-битных чисел и искать в нём. Вы тоже быстро фигачите какую-то структуру данных на готовых контейнерах или даже достаёте из закромов какую-то свою супероптимальную, заврорачиваете в фреймворк, куяк-куяк и в продакшен. Не нужна какая-то СУБД - выкинули, не жалко, кода было мало.

  2. И у вас есть второй вариант: сделать один хороший табличный «движок». Все эти клиенты получают всегда одно и то же представление, один и тот же интерфейс (возможно даже SQL). В особо упоротых сценариях вы дорабатываете этот движок под их формат данных (доработка повышает эффективность использования памяти/диска данной таблицей) и эта доработка оформляется просто в отдельный типа индекса или в некое хитрое слово, указываемое на этапе CREATE TABLE.

По какому пути вы бы двигались и ПОЧЕМУ?

  1. Кажется достаточно симпатичным путём, потому что хотя каждая новая «СУБД» - снова какой-то велосипед, но трудозатраты смешны - описать центральную структуру данных, остальное готово. Более того, у сторонников супер-оптимизаций тут все козыри: мол вы в «табличном движке общего назначения» никогда не задрочитесь так, как можем мы, зная конкретную структуру данных пользователя. Что, кстати, спорно - не факт, что задрачивальщики решают какую-то реальную проблему.

  2. Выглядит тоже круто, поскольку многие моменты унифицируются. Тайм Ту Маркет ещё ниже - не надо даже ждать пока под твою структуру данных разраб почешется и напишет новый (хоть и крошечный) код, ты можешь уже сейчас CREATE TABLE и в 95% случаев тебе хватит. Не хватит - тогда и придёшь ныть-оптимизировать. Универсальные моменты: способы доступа, способы анализа, язык общения между командами (все говорят про таблицы, а не каждый про свою абстрактную опердень, выраженную в каждый раз новом C++ коде), способы конвертации данных (переливка между таблицами - это понятнее, чем писать конвертеры данных между одним форматом (1) и другим форматом (1) и т.п., проще дорабатывать всякие автоматические решардинги или переливаторы данных - один раз сделали для таблиц и работает у всех, не надо каждый раз думать как оригинальный формат данных (1) обрабатывать. В конце-концов, можно сделать DROP COLUMN, что в случае (1) оборачивается жестью и конвертацией старых данных).

Спасибо.



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

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

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

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

Нет, это всё-таки не медицина. Вы опять недооцениваете серьёзность медицины и серьёзность профессии врачей. Максимум - легкая психотерапия: детские психотравмы, отсутствие позитивных примеров в детстве. Чаще всего - банально вырос в однополой семье из мамы и бабушки и неоткуда было тупо содрать пример поведения нормальной взрослой мужской особи. Дети до очень позднего возраста, лет до 30, склонны подражать и копировать поведение, тупая копипаста поведения - 95% воспитания. Какой был батя чёрт, такой и ты стал - чаще всего так.

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

Вы опять недооцениваете серьёзность медицины

Зачем жонглировать словами? В медицине (психиатрии) перечислены очень разные расстройства и далеко не все из них выглядят как «сидит в одной позе часами, смотря в стену» или «обмазывается говном и бегает по улице». Есть болезни, при которых человек выглядит нормальным, но, например, его мышление ощутимо искажено, из-за чего он наворачивает какое-то сумрачное безумие на ровном месте а ля «заполнил квартиру бытовым газом, чтобы избавиться от мух». А ещё есть пограничное расстройство личности, при котором человек может работать, вести какую-то социальную жизнь, следить за собой и всё такое, но при этом быть настолько омерзительным и удушливым мудаком, что проще пристрелить это животное, чем пытаться наладить с ним какой-то контакт.

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

Это просто низкая культура, не нужно тут приплетать медицину.

Скорее всего, ты ошибаешься и дело обстоит ровно наоборот: за явными отклонениями от нормальности в поведении человека скрывается какое-либо психическое расстройство. Оно может быть следствием психотравм, неудачной генетики или ещё чего-нибудь.

было можно оказывать физическое воздействие на тело оппонента и не садиться на зону за это

И сейчас можно, лол.

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

По моим наблюдениям, у большинства людей она неудачная. У меня у самого (вообще у нашей семьи) генетически обусловлены хреновые зубы и близорукость, но это, считай, счастливый билет по сравнению с теми «подарками», которые выпадают другим людям: хронические звиздецомы, физическое уродство или те же психические болезни.

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

Даже если данные не меняются, всегда есть вероятность возникновения новых интересов к ним. Например, получить доступ из других языков типа PHP или командной строки. Может птребоваться резервное копирование. И если для базы XXX все уже имеется, то для чего-то самописного надо делать. итд

vromanov ★★★
()
Ответ на: комментарий от alex1101

Скорее всего, ты ошибаешься и дело обстоит ровно наоборот: за явными отклонениями от нормальности в поведении человека скрывается какое-либо психическое расстройство. Оно может быть следствием психотравм, неудачной генетики или ещё чего-нибудь.

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

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

Не вижу смысла спорить с «я так скозал» 🤷🏻‍♂️

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

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

Даже знаю какой формат данных выбрать для вашего движка: Tree как универсальный формат общения программ и людей

Ох я все же прошел по ссылке. Там все прекрасно: от заголовка до лика электронного фюрера на фоне.

Вот кстати да, была бы эпичная битва: «универсальный формат vs табличные данные».

alex0x08 ★★★
()
Ответ на: комментарий от vromanov

Так доступ по сети к данным там в любом случае предполагается. Хоть из PHP, хоть для резервного копирования. Если нужен более близкий доступ, есть FFI. Это как раз неважно.

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

Я так формат хранения текста выбирал. Пока интерфейс предполагался только локальный графический, мне хватало стандартной сериализации класса text%: есть шрифты, изображения, и вообще можно отобразить произвольный экраннй объект с произвольным поведением. А потом мне потребовался гипертекстовый интерфейс и внезапно оказалось, что половину этих элементов я не могу преобразовать в HTML. Пришлось быстро перепиливать хранение в Markdown.

monk ★★★★★
()

Предположим вы бекенд-C++-тимлид в каком-то инновационном банке

Описание задачи, достоеное тимлида в каком-то инновационном банке.

или в каких-нибудь там одноклассниках или в гугло-яндексе

В одноклассниках таких ждут с распростертыми объятиями. Вот в гуглояднексе придется работать, к сожалению.

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

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

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

Описание задачи, достоеное тимлида в каком-то инновационном банке.

ТС настолько успешен что выбирает себе б\у ноутбук за $200 в соседней ветке

которые так и не смогли отказаться от квадратно-гнездового реляционного мышления.

к которому почему-то скатываются все популярные NoSQL в том или ином виде.

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

которые так и не смогли отказаться от квадратно-гнездового реляционного мышления.

к которому почему-то скатываются все популярные NoSQL в том или ином виде.

Чисто инерция. Реляционное представление КРАЙНЕ неудобно для распределенных БД, даже какие-нибудь графовые представления удобнее держать в распределенной БД, чем взаимно ссылающиеся таблицы, требующие достаточно строго согласованности данных во всех таблицах.

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

Реляционное представление КРАЙНЕ неудобно для распределенных БД

Сейчас я опять порву тебе шаблон. Есть такой термин «big data» и компания Teradata. Во внедрении этой самой терадаты я когда-то принимал участие - «щупал за мягкое вымя» так сказать.

И.. там SQL и даже джойны да:

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
LEFT OUTER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo) 
ORDER BY A.EmployeeNo; 

Теперь читай:

Teradata says the recent 1,000-node test that it ran on AWS not only shows the scale that its new cloud architecture can achieve, but also demonstrates the analytic flexibility required by its new target market, the Global 10,000.

The test, which took about four weeks to run and was announced one week ago, utilized 100 TB of data and simulated thousands of concurrent SQL queries submitted by more than 1,000 simulated users. The workload itself was a mix of quick-hitting operational queries that demanded fast response times, as well as more complex and longer-running decision support system (DSS) queries.

Вот так выглядит кровавый энтерпраиз: 1000 cерверов, 100 терабайт данных и SQL.

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

Сейчас я опять порву тебе шаблон. Есть такой термин «big data» и компания Teradata. Во внедрении этой самой терадаты я когда-то принимал участие - «щупал за мягкое вымя» так сказать.

Я ничего не знаю про Teradata, но я не верил в распределенные джоины с самого первого раза, как прочитал, что кто-то где-то их реализовал. Собственно, быстрое гугление показало, что да «массивно-параллельная архитектура с неверно спроектированной базой данных за счет перегрузки сетевых каналов между AMP-ами может давать даже худшие результаты, чем однопотоковый мощный сервер баз данных, такой, каким изначально создан сервер СУБД Oracle». Однако, я настаиваю на том, что классическая нормализованная реляционная БД — это и есть «неверно спроектированная БД». Да, можно денормализовать, но мы очень быстро придем к полям переменной длины, к массивам, и в конце-концов JSON-у в поле таблицы, а это уже нереляционная БД — что и требовалось доказать.

Вот так выглядит кровавый энтерпраиз: 1000 cерверов, 100 терабайт данных и SQL.

Это объем данных, которые можно было бы разместить на одном хосте (например, у backblaze на одном хосте стоит 60 дисков). Без описания природы данных и нагрузки говорить не о чем.

byko3y ★★★★
()
Ответ на: комментарий от monk

А всё остальное неудобно, когда нужно получить данные по произвольному запросу.

Аргумент валид, но запросы редко бывают действительно произвольными. Например, в реляционных БД очень редко используют рекурсивный поиск (банально кратчайшего пути). Да, под это дело создают специальные поля с пространственными индексами, но с каждой такой специализацией мы всё дальше и дальше уходим от исходной реляционной модели.

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

Я ничего не знаю про Teradata, но я не верил в распределенные джоины с самого первого раза, как прочитал, что кто-то где-то их реализовал.

Вера к инженерной работе отношения не имеет

быстрое гугление показало

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

я настаиваю на том, что классическая нормализованная реляционная БД — это и есть «неверно спроектированная БД».

Можно хоть занастаиваться но реальности это не изменит. Имеет смысл обсуждать решение проблемы а не описывать недостатки окружающего мира.

Без описания природы данных и нагрузки говорить не о чем.

Вот это самое интересное. Там все сразу: от неструктурированных raw data (те самые JSON/CSV) и до реляционных таблиц с индексами.

Ключевые слова: data lake, data warehouse - это все отдельная глубокая тема CS.

alex0x08 ★★★
()
Ответ на: комментарий от byko3y

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

В хранимой процедуре не так уж и сложно реализовать.

но с каждой такой специализацией мы всё дальше и дальше уходим от исходной реляционной модели

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

monk ★★★★★
()
Ответ на: комментарий от alex0x08

https://ytsaurus.tech/docs/en/yql/

https://habr.com/ru/companies/yandex/articles/721526/

2 экзабайта и 40000 хостов и … SQL.

Есть данные о том сколько байт в день ворочаются через SQL. Конкретное число называть не буду. Скажу, что дохрена. Это далеко не 100 терабайт.

Reset ★★★★★
()

По какому пути вы бы двигались и ПОЧЕМУ?

и ещё раз отвечу - это не вопрос тимлиду.

его дело сказать, " мой тим может это cделать или на край ‘надо пору чел, стойку серверов etc’ "; а ещё точнее должен отвечать «вон ту х@#ю мы точно сделать не сможем».

тимлид ограничивает фантазии архитекторов имеющимися реалиями.

MKuznetsov ★★★★★
()

Вопрос про дилемму в разработке систем хранения данных. По какому пути пойти? СУБД, таблицы, C++, треш, угар.

Да что ты понимаешь в треше. Иди сразу по пути xbase++

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

Эти вопросы уже на тему «не взять ли вам что-то нормальное, над чем 10 лет работало 70 человек до вас»

Нет. Это ответ на этот вопрос:

Потому как Вы не до конца понимаете что Вас ждёт, буквально, «прямо за углом».

Если б понимал, то наверное не задавал эти все вопросы.

На всякий случай уточню: у вас Kubernetes?

Теперь по вашим комментариям.

Как вы планируете решать split-brain проблему? Если что это ситуация когда две реплики (у вас же high availablilty, так?)

Нет. В задаче не было.

Ок, тогда уточню: ваши клиенты ок с тем, что иногда вас сервис будет пропадать на часы (downtime)? А если у вас не всё хорошо с процессами, то и на дни. Объяснять почему?

Как вы планируете решать проблему миграции данных, когда при очередном апгрейде придётся поменять дата-схему?

Если речь про вариант (1), то никак. Если очень надо, то кодить на С++ конвертер данных и т.п. гимор. Этим (2) и хорош - alter table просто.

То есть CI/CD у вас нет? А как доставляются патчи, в частности баг-фиксы? Люди ручками скачивают с репы, делают теми же ручками ALTER TABLE и запускают апгрейд? Сколько планирует пользователей вашего движка через 5 лет?

Ваш C++ фреймворк умеет в бекапы? И как это будет работать если параллельно с бекапом кто-то будет добавлять/изменять/удалять записи?

Там просто снепшоты, например. Любой файл на диске без суффикса .inprogress в имени - можно просто взять и унести в бекап. А бекап WAL - это просто его инкрементальное копирование в бекапилку (или другую реплику). Это как раз не самая сложная часть.

Какой может быть максимальный объем данных? Учитывая что были разговоры про масштабируемость, предположу что могут быть гигабайты. Как вы планируете делать INSERT, DELETE? Если реально вставлять и удалять записи, то у случае такой операции на первой записи вам потребуется перезаписать весь файл (что при таких объемах займёт значительное время, но допустим вы обойдёте это асинхронностью). И, если параллельно с перезаписью файла бежит бекап, то он, бекап, превратится в тыкву. Понятно почему? А если вы удаляете путём дописывания в файл или другой модификации без изменения размера, то 1) вам потребуется VACUUM механизм 2) время поиска может быть уже не миллисекунды; и это всё ещё без JOIN’ов.

По поводу документации, поддержки и т. п. - сразу ответьте на вопрос: вы хотите чтобы проект жил более 3-5 лет. Если нет, то, да, можно об этом не заморачиваться. Но если не планируется через 3-5 лет менять на что-то другое, даже банальный одностаничник требует документации. Можете не верить, но тогда запишите вот этот мой коммент, и поставьте напоминалку через 5 лет. Я гарантирую, что те люди которые еще будут за это отвечать, либо 1) давно уже заменят ваше творение на что-то другое, либо 2) будут регулярно поминать вас в суе.

Про перформанс могу набросать сценариев, но коммент и так длинный…

Итог: если вашим клиентам нужен банальный std::unordered_set<std::string> и небольшое количество данных, то они могут реализовать его сами у себя в коде. Если задача такова, что рассматривается вариант создания отдельного приложения, то года через 2 у вас появится либо 1) седые волосы, либо 2) замечательный опыт создания второго Redis’а, а также работа с которой вас не смогут уволить.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 5)
Ответ на: комментарий от monk

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

В хранимой процедуре не так уж и сложно реализовать.

Чисто теоретически реализовать можно всё, а вот практически есть большие вопросы по производительности «произвольного запроса». Собственно, даже в рамках простых реляционных запросов не всё так просто с производительностью.

Но если вдруг начнут появляться новые, то то, что на SQL пишется за пять минут не приходя в сознание и работает достаточно быстро, на своём велосипеде может внезапно потребовать переработки всей структуры БД.

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

byko3y ★★★★
()
Ответ на: комментарий от Reset

https://ytsaurus.tech/docs/en/yql/
2 экзабайта и 40000 хостов и … SQL.
Есть данные о том сколько байт в день ворочаются через SQL. Конкретное число называть не буду. Скажу, что дохрена. Это далеко не 100 терабайт.

Вот это уже больше похоже на распределенщину. Правда, это уже не совсем SQL или даже совсем не SQL.

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

Правда, это уже не совсем SQL или даже совсем не SQL.

С чего ты взял? Поддержка привычного pg синтаксиса тоже есть: https://github.com/ydb-platform/ydb/blob/main/ydb/docs/ru/core/postgresql/intro.md

YQL движок в YDB и в YtSaurus один и тот же. Для YtSaurus он может транслировать SQL как в набор Map/Reduce так и в свой стриминговый рантайм, похожий на спарк.

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

С чего ты взял? Поддержка привычного pg синтаксиса тоже есть: https://github.com/ydb-platform/ydb/blob/main/ydb/docs/ru/core/postgresql/int...

Вот теперь мне ответь на вопрос: зачем? Протокол PG Wire нестолько богоподобный, что нужно бросать все имеющиеся тулзы и бежать на него? Нет, просто у кого-то есть легаси для постгри и его нужно с минимальным гемором оттранслировать в механизм выполнения запросов, который с РСУБД имеет очень мало общего. Чисто теоретически YDB (но не YtSaurus, насколько мне известно) может выполнять SQL запросы с глобальными гарантиями консистентности, но производительность таких запросов будет смешная (все запросы будут идти через единственную координационную таблетку). Чем больше нужна масштабируемость — тем меньше нужен SQL, и тем более нужны non-SQL расширения.

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

Вот теперь мне ответь на вопрос: зачем?

Там дело даже не в протоколе, а в поддержке стандартного pg синтаксиса, который наиболее близок к стандартному SQL. Такая поддержка нужна чтобы писать запросы в привычном синтаксисе и не заморачиваться на нюансы YQL. Каков статус wire протокола я не знаю, но pg синтаксис работает и без него.

но не YtSaurus, насколько мне известно

Там нет обновления таблиц, есть запись в новые. Поэтому можно сказать, что глобальные гарантии есть. Для обновлений есть «динамические таблицы» (это ala hbase) с ними надо работать не через YQL, а через свой интерфейс.

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

Промышленные тесты показывают, что это не так.

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

Такая поддержка нужна чтобы писать запросы в привычном синтаксисе и не заморачиваться на нюансы YQL.

Ты сам написал то же, что я пишу — дело не в превосходстве SQL, а в необучаемости кодеров и DBA (ну или в наличии большого наследия, ладно).

Там нет обновления таблиц, есть запись в новые. Поэтому можно сказать, что глобальные гарантии есть. Для обновлений есть «динамические таблицы» (это ala hbase) с ними надо работать не через YQL, а через свой интерфейс.

У неизменяемых данных консистентность является неотъемлимым свойством, проблема консистентности возникает, когда нужно хотя бы ответить на вопрос «какое единственное состояние является наиболее актуальным?» — и выясняется, что с асинхронных реплик ты при ответе на этот вопрос читать не можешь.

Промышленные тесты показывают, что это не так.

«Промышленные тесты» — это SELECT Count()/Max(), условный INSERT, или же все-таки OLTP по ключам?

byko3y ★★★★
()
Ответ на: комментарий от alex0x08

OLTP-то тут причем? Для кубов же отдельные технологии есть и отдельные требования.

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

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

«Промышленные тесты» — это SELECT Count()/Max(), условный INSERT, или же все-таки OLTP по ключам?

Семейство тестов TPC-*

Для OLTP TPC-C: https://habr.com/ru/companies/ydb/articles/763938/

Для OLAP TPC-H и TPC-DS. В OLAP тестах нет insert’ов.

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

Для OLTP TPC-C: https://habr.com/ru/companies/ydb/articles/763938/

В этой установке фактор распределенности минимален (может быть задействуется в read-committed выборка, и то не факт), есть только отказоустойчивость трех полных реплик. Чтобы начать говорить про сложный SQL, нужно иметь хотя бы два шарда (по три реплики, естественно).

byko3y ★★★★
()
Ответ на: комментарий от Kroz

что иногда вас сервис будет пропадать на часы

Откуда инфа, что он будет падать. Перезапустить с почти моментальным подхватыванием прослушиваемого порта - это так сложно?

lesopilorama
() автор топика
Ответ на: комментарий от Kroz

А как доставляются патчи, в частности баг-фиксы? Люди ручками

Нет никаких людей. Речь о глубоко closed-source системе где-то в недрах гугла, в публичную плоскость даже название которой не всегда попадает.

lesopilorama
() автор топика
Ответ на: комментарий от Kroz

Какой может быть максимальный объем данных? Учитывая что были разговоры про масштабируемость, предположу что могут быть гигабайты. Как вы планируете делать INSERT, DELETE? Если реально вставлять и удалять записи, то у случае такой операции на первой записи вам потребуется перезаписать весь файл

Тут уже пошли неинтересные разговоры про детали реализации. Можно это сделать 100500 способами, начиная с LSM-концепции, когда в памяти лежит «нулевой» слой данных и можно хранить свежие апдейты там, а при следующем обращении к апдейтнутому объекту до диска даже не дойти. Или «просто» сделать B+-tree, у которого изменённые страницы в памяти застревают и сбрасываются на диск раз в сутки.

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

Речь о глубоко closed-source системе где-то в недрах гугла,

Когда писал статью про GNUstep изучал вопрос его появления:

Проект был начат Паулем Кунцем (Paul Kunz) с командой из Стенфордского Центра линейного ускорителя (Stanford Linear Accelerator Center) которым был нужен порт HippoDraw из NeXTSTEP на другую платформу. Вместо того, чтобы переписывать программу с нуля, используя ее архитектуру, разработчики решили переписать слой NeXTSTEP, от которого зависело приложение. Это была первая версия libobjcX.

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

Это ответ на самый важный для тебя вопрос.

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

Это ответ на самый важный для тебя вопрос.

Это и так ясно. Опять кэпы кидаются чем-то очевидным в треде.

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

генетически обусловлены хреновые зубы

Исследователи с департамента антропологической стоматологии Гарварда (или другой башни из слоновой кости, не помню, ссылку искать лень) задались вопросом, почему древним людям был за ненадобностью ортодонт; подозревали, что дело в генетике. Однако, после многолетнего сбора данных в Индии и Бразилии (в странах с серъёзным социо-экономическим расслоением) было замечено, что у нищуков зубы идеально ровные и куда менее проблемные, чем у детей из семей с достатком. Это исключило вариант с генетической предрасположенностью. Если кратко, они пришли к выводу, что решает питание в первые 3 года жизни. Состоятельные родители своим корзиночкам еду чуть ли не пережёвывают, прежде чем срыгнуть чаду в рот: кашки-малашки, пюрешки, перетёртое НЁХ. Нищукам похрен, кидают сухарь - не съел, значит не голодный. И вот эта (необходимая!) нагрузка в первые годы жизни закладывает фундамент задолго до появления постоянных зубов. А кривые зубы и неправильный прикус, в свою очередь, ведут к дальнейшим проблемам, в том числе к преждевременному износу.

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

Да ну, чепуха какая-то.

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

Если это действительно так (в чём есть сомнения), то есть куда более логичное объяснение: доступность сладостей.

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

Ага, коренные зубы ж помнят, какая там нагрузка была у молочных))

Не стоит воспринимать на веру всё, что пишут учоные-чучоные. В научных изданиях публикуется куча бредятины. А в научно-популярных количество бредятины возрастает многократно. Я уж не говорю о всяких белибердовых медиа, которые пишут перепевы рабиновичей или тупо выдумывают новости типа «учёные установили, что…» из головы.

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

Если это действительно так (в чём есть сомнения), то есть куда более логичное объяснение: доступность сладостей.

От сладкого кривятся зубы и не всходят восьмёрки? Звучит логично.

Ага, коренные зубы ж помнят, какая там нагрузка была у молочных))

Е, бать, ты стоматолог и независимый мыслитель. В 3 года заканчивают прорезываться молочные зубы. От того, что у тебя там сформировалось в этот период, какой прикус, будет зависеть ситуация с постоянными зубами.

Иными словами, к выводу ты пришёл правильному (во всём виновата твоя мамка), но использовал ложные предпосылки (в плохих зубах якобы виновато ДНК).

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

У меня зубы не кривые и с прикусом всё нормально. С этим вот совсем нет проблем.

в плохих зубах якобы виновато ДНК

Я не вижу другого объяснения. В моей семье из 6 человек у 5-х (кроме отца) постоянные проблемы с зубами. И у родственников по линии матушки тоже проблемы с зубами. Крайне маловероятно, что все эти люди, включая меня, питались в детстве совершенно одинаково. Тем более, что нашу семью во времена моего детства нельзя было назвать семьёй с достатком, и уж тем более этого нельзя было сказать о семье матушки и семьях её родственников. Житие тогда тяжкое было.

независимый мыслитель

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

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

В моей семье из 6 человек у 5-х (кроме отца) постоянные проблемы с зубами.

Нет уже проблем с зубами, не в средние века живем. Выпал зуб? - ставишь имплант.

Искусственное сердце уже могут поставить а ты про какие-то зубы ноешь.

alex0x08 ★★★
()