|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Мало ли ты встречал приложений завязанных на Oracle/MSSQL/etc которые сами следят за связностью данных в разных таблицах? А ведь это типичные RDBMS используемые в модели NR-DBMS и то что они используют язык запросов наследованный от SQL-92 не делает их реляционными. Вопрос задан как-то странно. "Мало ли..." Скажу так. Я встречал много плохих приложений которые благодаря законам и гарантиям RDBMS худо-бедно работали. И я встречал "очень модные" попытки писать данные в Windows/NTFS и AWS/S3 которые впоследствии становились мусорной свалкой где нельзя было ничего гарантировать и бизнес-логика должна была просто учитывать возможные ошибки неконсистентности как данность. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:30 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... Что это за волшебная библиотека если не секрет? Я сейчас выпил два по 0.5 светлого и очень сентиментален и уже готов взять в объятия это чудо и полюбить его крепче чем Oracle в БД и Erlang в отказоустойчивых системах. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:33 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... Что это за волшебная библиотека если не секрет? Я сейчас выпил два по 0.5 светлого и очень сентиментален и уже готов взять в объятия это чудо и полюбить его крепче чем Oracle в БД и Erlang в отказоустойчивых системах. Ах да, темка то %$#!@, но зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 23:27 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Я имел в виду следующее. Стоимость поддержки изменений в реляционной БД ~ равна некой условной величине. Назовем ее 1 story point. Добавить внешний ключ. 1 единица. Проиндексировать поле - тоже 1 единица. Порезать таблицу вдоль на 2 суб-таблицы типа родитель-потомок - тоже 1 единица. Я утрирую конечно - но объем работ примерно одинаков с точки зрения рисков. А в не-реляционных идет так. Сделать плюшку - 0.5 поинтов. Потом еще плюшка - 0.5 поинтов. А потом прилетает плюшка которая стоит аж 100500 поинтов. Или ее сделать нереально или архитекторы просто ее не хотят делать по причине того что модель уже настолько далека от желаемого что проще создать новую систему. При том что в реляционной эта-же плюшка стоила бы ну 3-5 поинтов. Стоимость поддержки изменений в любой БД (реляционной и не) измеряется в IO. Хочешь обновить одну запись? Читаем с диска в память индекс, в нем находим где в таблице находится нужная запись, читаем тот самый сектор с диска, обновляем данные в памяти, записываем обновленный сектор обратно на диск. Если условия поиска записи не попадает ни под один индекс - поочередно читаем с диска всю таблицу, проверяем каждую запись на совпадение с условием поиска. Если хочешь создать новый индекс - поочередно читаем с диска всю таблицу, строим индекс, записываем его на диск. Самое дорогое - IO с диском. Поэтому и стараются давать кэши побольше, SSD диски побыстрее, индексы поточнее. Нету никаких "единиц" есть только чтение-запись с диска. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:03 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl Разница между реляционной и не-реляционной базой на самом деле очень маленькая. И заключается она всего-лишь в том, что в "реляционной" можно определить связи (внешние ключи которые) и сам движок БД будет отслеживать их целостность при изменении данных. А в не-реляционной такой возможности нет, там за целостностью данных надо следить на уровне приложения. И все. Ну ты даёшь блин. Ну возьми бухгалтерскую учебную бд и втащи ее в не-реляционную с сохранением целостности денег на транзакциях и отчотах. Кстати перечисли те системы из класса не-реляционных на которые ты ссылаешся. Тема - это размытая. Тут - каждый сам себе что-то имеет в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:04 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl Вот смотри, ты сейчас используешь Кассандру которая хочет держать счетчики в отдельных таблицах и не мешать их с полями другого типа. Это плюшка. А Оракл вообще не имеет счетчиков, нет у него такой плюшки в движке, поэтому ораклисты вынужденны использовать обычное целочисленное поле. Разве в Оракле я не могу сделать такое? Код: plsql 1.
Код: plsql 1.
будет получше слегка :) mayton Ровно тоже самое я хотел от Cassandra но она отказала мне в декларации таблиц а вовсе не в реализации этого чудесного DML. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В одной таблице описание объекта, в другой счетчики. Причем с точки зрения производительности будет лучше даже не одну таблицу, а три сделать: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Чем меньше таблица в ширину, тем больше записей влезает на одну страницу. И при условии что надо будет обновлять несколько записей подряд - вместо одного IO на каждую запись может получиться один IO на несколько записей. Тут может помочь кластерная индексация, хотя это и не совсем совпадает с твоей текущей задачей. А работать с этим ты будешь также как и раньше, просто в одну таблицу пихаешь описание ноды, а потом дергаешь счетчики во вторичной таблице. Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:20 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl А в IQ нет нужды делать индексы, там каждое поле автоматически индексировано потому что у БД колоночный метод хранения таблиц - очень тормознуто на обновлениях, но для выборок - конфетка. А вот с этого момента - поподробнее. Column-oriented это не про индекс а про форму хранения. Не знаком c IQ но идеология column-oriented это не про обновления а про выборки-агрегации. Разворот на 90 градусов data-row по сути. Хотя может мы о разных вещах говорим? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:32 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton White Owl С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... Что это за волшебная библиотека если не секрет? Я сейчас выпил два по 0.5 светлого и очень сентиментален и уже готов взять в объятия это чудо и полюбить его крепче чем Oracle в БД и Erlang в отказоустойчивых системах. И нет, это не шутка, она действительно так называется :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 01:34 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, ФС как база данных. Сценарии, когда такое прокатит и всё такое. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 06:28 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton пропущено... Ну ты даёшь блин. Ну возьми бухгалтерскую учебную бд и втащи ее в не-реляционную с сохранением целостности денег на транзакциях и отчотах. Кстати перечисли те системы из класса не-реляционных на которые ты ссылаешся. Тема - это размытая. Тут - каждый сам себе что-то имеет в виду. dBase видел. Мы грузили с него телефонный трафик в Oracle. Бухгалтерию не видел. Мы как раз смигрировали с одной старой dbf-системы на Парус предприятие. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Чем меньше таблица в ширину, тем больше записей влезает на одну страницу. И при условии что надо будет обновлять несколько записей подряд - вместо одного IO на каждую запись может получиться один IO на несколько записей. Тут может помочь кластерная индексация, хотя это и не совсем совпадает с твоей текущей задачей. Не могу согласится с таким разбиением. В инженерных задачах - эстетика тоже важна. А я - большой эстет. Я не ставлю себе задачей - суждать физический размер data-row. Эта цель - специфична для bigdata - технологий. И оптимизация попаданий в кеш-линию мне тоже не нужна пока. Мне важнее то насколько удобно я буду видеть статистику реквестов по нодам. Тем более что они связны. Если нода сделала ping. То следующим реквестом оа запросит список известных пиров или другиг нодов. Корреляция выходит. И зачем мне тогда таблицы нарезанные узкими полосками? Тут самое толстое поле - это первичный ключ. Разумнее склеивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:22 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, А разве сам движок БД не мог бы размещать столбцы по отдельности, если в определённых ситуациях это производительнее? Потому что размещать атрибуты в отдельных таблицах — это беспредел. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:31 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petrav mayton, А разве сам движок БД не мог бы размещать столбцы по отдельности, если в определённых ситуациях это производительнее? Потому что размещать атрибуты в отдельных таблицах — это беспредел. Apache ORC и Parquet так и делают. Но это не движки DBMS. А движки неких замороженных снимков данных для аналитики. Обычно они - исторические. По сути это форматы бинарного хранения больших данных. Даижком это назвать вряд-ли можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 11:56 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik mayton, интересует запрет повторного запуска проги той же папки. Из другой можно. Главный вопрос - активировать прогу уже запущенную из этой папки. Очень просто же, вешаешь мьютекс именованый глобальный, если создал -- ты первый. Если мьютекс уже был создан -- приложение уже было запущено, и ты завершаешься. Либо также можно глобальный атом делать, либо другой любой именованый объект межпроцессного взаимодействия. (в линуксах для этого используют часто реальные файлы в файловой системе) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:18 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, Нужны какие то тесты что ли.... Показывающие что "вот схема классик и бд не справляется" = наличие проблемы. А вот схема заточенная на решение проблемы. Ну а по теории, строят Логическую и Физическую схему. В логической бизнес. В физической ключи, отношения, типы и последовательности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:23 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton, Нужны какие то тесты что ли.... Показывающие что "вот схема классик и бд не справляется" = наличие проблемы. А вот схема заточенная на решение проблемы. Ну а по теории, строят Логическую и Физическую схему. В логической бизнес. В физической ключи, отношения, типы и последовательности. Нет-нет. Нету пока никаких тестов. И нету проблемы. Есть просто вопрос эстетики. Мне не нравится когда таблица порезана на 3 вертикальных полоски просто так. В угоду идеям перформанса. Я не знаю какова должна быть просадка перформанса (явно больше 1000%) чтоб я начал думать о порезании таблич на куски. Да и не ставлю я пока таких вопросов. Давайте поскипаем эту тему. Я подниму ее чуть позже в Программировании в разрезе самого сетевого протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 12:57 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, Полоски это партицирование? >поскипаем = ОК ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:23 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Вообще мне всегда казалось, что NoSQL был рождён из-за недостатков SQL. Проблема реляционных баз данных в плохой масштабируемости. Когда возникает big data и тебе нужны десятки тысяч серверов БД по всей планете, то SQL не справляется. Да, NoSQL не гарантирует связанности данных, но мы ей жертвуем, что бы юзер хотя бы что-то мог найти в нашей распределённой БД. Но в данном диалоге прослеживаются такие нотки, что мол вообще можно/нужно использовать NoSQL просто повсеместно. Просто потому что это модно и молодёжно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:31 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petravВообще мне всегда казалось, что NoSQL был рождён из-за недостатков SQL. Да, но не тех, о которых ты говоришь. Когда очередной энтузазист делает свою собственную СУБД с покером - он не осиливает полный парсер и оптимизатор SQL поэтому выкидывает его и преподносит прямой доступ к внутренним структурам и функциям как достоинство. STFW FwMas. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 13:45 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
По поводу поля counter. Я думаю что все просто. Запросы с инкрементом - не идемпотентные. А поскольку Apache Cassandra гарантирует работу таблиц одной базы в пределах земного шара - то ей нужны внятные механизмы репликации которые не сломают реплику. Скорее всего такое разделение введено с целью разделить два протокола. Один - простой для UPDATE .. SET field = value. А другой для UPDATE .. SET field = f(field) который требует повышенного внимания в дубликатам сетевых собыйтий. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:19 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Не могу согласится с таким разбиением. В инженерных задачах - эстетика тоже важна. А я - большой эстет. Я не ставлю себе задачей - суждать физический размер data-row. Эта цель - специфична для bigdata - технологий. И оптимизация попаданий в кеш-линию мне тоже не нужна пока. Мне важнее то насколько удобно я буду видеть статистику реквестов по нодам. Тем более что они связны. Если нода сделала ping. То следующим реквестом оа запросит список известных пиров или другиг нодов. Корреляция выходит. И зачем мне тогда таблицы нарезанные узкими полосками? Тут самое толстое поле - это первичный ключ. Разумнее склеивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:21 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Хм... это мысль. Впрочем я пока думаю выкинуть Кассандру и вернуться к Postgresql. Это был творческий эксперимент. Он наполовину удался. Я доволен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:24 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton, - чтобы гарантировать в пределах земного шара достаточно не совпадения PK. Одно из решений GUID - при GUID реплика не ломается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:25 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Хм... это мысль. Впрочем я пока думаю выкинуть Кассандру и вернуться к Postgresql. Это был творческий эксперимент. Он наполовину удался. Я доволен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2021, 16:27 |
|
|
start [/forum/topic.php?fid=57&msg=40055808&tid=2017244]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 396ms |
0 / 0 |