Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Привет человеки. Что нужно для создания своей in-memory Column-oriented dbms ? А именно - какие структуры данных юзаются? Как организовываются связи между элементами колонок. Как идут CRUD-операции? В этом сабже я разбираюсь примерно как корова в балете. Можете писать смело основы. Thnx. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 15:31 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonА именно - какие структуры данных юзаются? Как организовываются связи между элементами колонок. Как идут CRUD-операции? Массивы. Никак кроме как по общему индексу в массиве. Последовательно над всеми массивами колонок. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:21 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, а insert/delete в принципе возможен для COEDBMS? Или 1 раз залил и только читать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:23 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Думаю все можно. В бусте даже заготовка есть boost::multi_index. MasterZiv недавно пример писал . Добавь контроль целостности, блокировки при записи и будет полноценная in-memory СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:30 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Ты вроде sqlite осваивал. Если не путаю, там есть возможность создать in-memory БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:31 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Задам другой вопрос. Правильно ли я понял что CODBMS всегда сортируют значения в колонках ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 16:47 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonЗадам другой вопрос. Правильно ли я понял что CODBMS всегда сортируют значения в колонках ? если честно - ХЗ. С массивами все грустно. Постоянно сортировать - не быстро на больших таблицах. Вставка/удаление тоже не быстро. Если использовать массивы - то по аналогии работы с DBF: добавлять в конец, а вместо удаления пометка на удаление. Для режима readonly массивы предпочтительнее, при интенсивных изменениях - std::map. Я микроБД делал на std::map. Индексы тоже std::map. Инфа не требующая долгосрочного хранения: учет залогиненных юзеров, сессии и еще кое-какие метаданные. При интенсивном изменении все быстро работает: и чтение и запись. ПсевдоБД из 2-3 таблиц с индексами и целостностью вполне просто реализовать. Правда с тремя уже сложно стало, так что при 3+ таблицах смотрел бы готовые решения типа sqlite, т.к. начинает просто не хватать стандартного SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 18:25 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonЗадам другой вопрос. Правильно ли я понял что CODBMS всегда сортируют значения в колонках ?Нет сортирует не всегда, но всегда индексирует, а уже от нужд индексации, может и сортировка произойти :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 19:49 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
White OwlmaytonЗадам другой вопрос. Правильно ли я понял что CODBMS всегда сортируют значения в колонках ?Нет сортирует не всегда, но всегда индексирует, а уже от нужд индексации, может и сортировка произойти :) А какой смысл индекс держать отдельно от данных если он всегда состоит из 1 поля? Колонка это и есть индекс по отношению к самой себе. Я так себе принцип понимаю. Но вопрос другой я делаю к примеру так: Код: plaintext 1. То я хочу не просто получить ages в диапазоне а я хочу получить связи. Тоесть и колонку name вместе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 20:09 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonА какой смысл индекс держать отдельно от данных если он всегда состоит из 1 поля? Колонка это и есть индекс индексов может быть (обычно есть) несколько. Если у тебя таблица из структур {A, B, C} то запрос может быть "... where A = XXX" и "... where В = XXX" тут физической сортировкой не порешать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 20:19 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonНо вопрос другой я делаю к примеру так: Код: plaintext 1. То я хочу не просто получить ages в диапазоне а я хочу получить связи. Тоесть и колонку name вместе. в чем проблема? Есть индекс по age, по нему извлекаются номера записей и все записи копируются в результат. Хотя если все в памяти, то достаточно указателей на записи. т.е. вопреки правилам так может быть быстрее Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 20:26 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
ОК. Давайте я зайду с третьей стороны. Есть учебная табличка. Dept Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Прошу вас изобразить рисунком. Или презентацией. Или любым другим графическим тулзом. Как? Каким образом CODBMS будет хранить в своей памяти эту табличку? Для простоты - in-memory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 22:48 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonКаким образом CODBMS будет хранить в своей памяти эту табличку? Код: sql 1. 2. 3. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 22:59 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, да но здесь нет сортировки по полю DNAME и LOC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 23:07 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonда но здесь нет сортировки по полю DNAME и LOC. Насколько я знаю, column-ориентированность вовсе не подразумевает сортированность всего. Это всего лишь формат хранения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 23:10 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Тогда я разочарован. Я просто искал структуру данных или хранения данных которая позволяла-бы работать с таблицей так как будто у нее все поля всегда проиндексированы. Мне казалось что это достижимо для CODBMS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 23:13 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonМне казалось что это достижимо для CODBMS Нет, их выигрыш исключительно на кучковании данных столбца. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 23:14 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Ну... я вот такой патчик накатил. Через двоеточие - ссылка на индекс. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2016, 23:23 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonТогда я разочарован. Я просто искал структуру данных или хранения данных которая позволяла-бы работать с таблицей так как будто у нее все поля всегда проиндексированы. Мне казалось что это достижимо для CODBMS поясни - что и зачем ты хочешь делать по индексу (номеру/итератору) - а) обращаться к полю в строке таблицы или б) обращаться по номеру к конкретной строке таблицы в) что-то третье (вычитывать подряд данные строк с 5 по 50 принадлежащие к 17-му столбцу) Для реляционной теории первое не возбраняется (технически описание элементов отношения именами и уникальными номерами, имеющими характер атрибутов множества, эквивалентно ). С практической точки зрения, климентские интерфейсы типа odbc естественным образом допускают обращение к элементам (полям) полученного набора данных по номерам. , а второе с точки зрения теории не имеет смысла. В практическом плане самые простые системы работы с данными вроде данных в формате dbf-III естественным путем обеспечивают работу со строками по номерам. Разница между строчным и колоночным хранением примерно такая - в первом случае некая непрерывная область памяти содержит набор строк, во втором случае непрерывная область памяти содержит данные одного столбца, относящиеся к множеству строк таблицы. Первый заход ориентирован на эффективную горизонтальную фильтрацию (строк) за счет малого проигрыша в скорости вертикальной фильтрации - если из таблицы всегда выбираются селектом все поля отношения по условиям наложенным на каждое из них, и при этом в результат должно попасть лишь малое число строк, то строчное хранение победитель как самое быстрое. А если из таблицы на 125 полей и триллион строк всегда выбирается лишь пара полей (узкая проекция широкой таблицы), то в порядки раз быстрее два раза пробежаться по двум непрерывным областям хранения значений полей (вау -= параллельно пробежаться) чем перемолачивать гигатонны террабайт игнорируемых столбцов при строчном хранении. В таком случае игнорируемые столбцы просто не будут прочитаны и потому не смогут создать никакой нагрузки фактом своего существования. Зато Select * для column store - это простая, примитивного сорта (то есть - невыразимая словами) боль . А зато если в лоб хранить column store в файлах по числу столбцов, да на каждый из них натравить zip, то ого-го какую экономию можно получить в размере базы данных, по сравнению со строчным хранением (говорят, что при инмемори компрешн втрое лучше сжимать столбцами, чем строками), из-за однородности данных (дни рождения с днями рождения, сексуальные принадлежности с сексуальными принадлежностями, коды территорий рядком с кодами территорий и т.п.) Думаю, что для любого случая конкретной таблицы потребуется ее описатель, включающий в себя описатель полей (словарь полей) (или набор описателей - если ты захочешь на уровне определения таблицы иметь множественное описание - именами и метками номеров (имена другого сорта - другой системы, с которыми при доп. договоренности можно обращаться как с числами). Дальше, для строчного хранения, потребуется указатель на область памяти, с которой начинается хранилище строк. Детали устройства строки на твое усмотрение - обязана она быть фиксированной длины или нет (если что-то чуть более "продвинутое" , чем dbf - то длину строки не фиксируют. Имеет право хотя бы иногда быть фрагментированной - то есть занимать несколько непрерывных диапазонов внутри логически сплошной области хранения строк или нет и т.д. Описатель таблицы при колоночном хранении имеет не единственный указатель на начало области хранения содержимого таблицы, а столько указателей на наборы непрерывных областей, сколько столбцов в таблице - каждый столбец будет жить в своей непрерывной области памяти. Если допускается формулировка связанных с таблицами индексов, то к описателю таблицы добавляется список описателей имеющихся индексов. Если разглядывать Землю невооруженным глазом с границ Солнечной Системы, то примерно как-то так. А по мере приближения к Земле, число различимых звездочек имеет право увеличиваться - сначала 3, потом 5. Т.е. - детали всех алгоритмов - выборки, проекции и соединения не совпадают и специфичны для своего "способа хранения". ps1 Прошу извинить за участие в топике - про C++ я в практическом плане ничего не знаю. Ps2 не знаю что сейчас в базвордах по поводу колумн сторе. Лет 10 назад было правильно гуглить по словам C-Store или MonetDB или Sybase IQ. А сейчас какую только чертовщину этим словом не назовут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 01:22 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
booby, прошу простить опечатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 01:24 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
boobymaytonТогда я разочарован. Я просто искал структуру данных или хранения данных которая позволяла-бы работать с таблицей так как будто у нее все поля всегда проиндексированы. Мне казалось что это достижимо для CODBMS поясни - что и зачем ты хочешь делать по индексу (номеру/итератору) - а) обращаться к полю в строке таблицы или б) обращаться по номеру к конкретной строке таблицы в) что-то третье (вычитывать подряд данные строк с 5 по 50 принадлежащие к 17-му столбцу) ОК. Я польщен конечно что ты написал так много букв. Но можно было и короче. В режиме диалога. Зайду с другой стороны. В 2007 году произошла некотороая маленькая тех. революция. Поступили в продажу SSD-накопители. Что для нас, айтишников это означает? И что означает для DBA-ев. Изменяются принципы. Принципы проектирования хранилища данных. Для SSD существенно улучшился SEEK_TIME, который косвенно связан со стоимостью IOPS. Индексное чтение снова в фаворе. И оно очень выгодно. Я рассуждаю так. Что low-level структуры данных должны это учитывать и более плотно использовать возможности индексов. В идеале БД класса OLTP должна предполагать быстрый доступ к данным в любой конфигурации запросов (клауза WHERE). А этого можно достигнуть только имея индексы по каждой колонке а то и по группе колонок (составные). Есть еще другие опции ускорения доступа такие как частичная материализация, сегментирование и кластеризация группы таблиц вокруг ключа но мы их пока поскипаем ибо это уже не OLTP а чуть сложнее. Идеальная (на мой взгляд OLTP система) для таблички dept должна создаваться так: Код: plsql 1. 2. 3. 4. 5. Далее идут 3 скрипта на создание 3х индексов по каждому полю. В этой схеме все хорошо кроме самой таблицы. Она не нужна. Вся информация уже есть в индексах. Осталось только дополнить эти индексы связями для получения интерфейса курсора для выборки всех (SELECT * ) полей. Впрочем последний вариант - маловероятен ведь я изначально давлю на использование OLTP-mode. (сорри убегаю отпишу продолжение позже) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 13:38 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton, мне кажется, что я приблизительно почувствовал, чего ты ищешь. так же мне кажется, что в этом деле есть перпендикуляр. то есть в наборе твоих суждений стоят как заходы, в которых ты скорее прав, так и заходы, в которых ты по вероятности не прав на текущий момент. да, копаниями, рубаниями, отсечениями, дерзаниями и терзаниями на перпендикулярах что-то интересное создается. в диковатой озвучке - некий всепольный супер-индекс как универсальная структура произвольного доступа по произвольно взятой комбинации полей. также мне понятно, почему ты готов пожертвовать ценой восстановления экземпляра строки ради скорости поиска. это да - column store специфически для этого, но !не для oltp! на сегодня. типичный oltp это однострочный select -> update/insert -> comit column store пытается выиграть на первой фазе, откровенно наплевав на вторую и третью. что для oltp полностью неприемлемо. column store и позиционируется и фактически применяется для data warehouse, где в online нет ни update/insert ни коммит. сломать это может только волшебство, внезапно хотя бы приближающее insert/update/commit к временам, характерным для строчного хранения. Вообще, пока будешь бегать, посмотри на устройство индекс-организованных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 14:30 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
boobyтакже мне понятно, почему ты готов пожертвовать ценой восстановления экземпляра строки ради скорости поиска. Ну.. во первых это другая тема. Собственно WAL (write-ahead-log) или redo-log для Im-databases никто не отменяет. И его формат вовсе не должен обязательно быть привязан к модели хранения в memory. Достаточно гарантировать что при операциях insert/update/delete мы фиксируем на логическом уровне изменяющуюся сущность в логе. Будет ли она приближена к формату хранения в memory или отдалена - это уже другой вопрос. Но в данном конкретном случае я-бы хотел отвязаться от диска и обсудить как реализовать БД моей мечты. Или БД в которой не будет потребности индексировать столбцы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 15:17 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton...Или БД в которой не будет потребности индексировать столбцы. вероятно it's doable в каком-то виде. во первых - внутри индекс-организованных полей структура совмещена - строки хранятся прямо в структуре индекса, во вторых, если не идет речь многопользовательском варианте и совместном доступе, то первое, что приходит в голову - некий граф поверх bitmap полей, кодирующих конечный словарный набор значений как разширение идеи индекс-организованной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 15:39 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39235608&tid=2018523]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 163ms |

| 0 / 0 |
