Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
booby, внутри индекс-организованных полей таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 15:41 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
booby- некий граф поверх bitmap полей, кодирующих конечный словарный набор значений как разширение идеи индекс-организованной таблицы. Sorry. Я это вообще не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 15:45 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton, погугли (дополнительно к индекс-организованным таблицам) "oracle bitmap index structure" что-нибудь вроде доки или здесь посмотри - www.juliandyke.com/Presentations/BitmapIndexInternals.pp bitmap-индекс это попытка обеспечить быстрый доступ (в том числе по комбинации) для полей, у которых набор значений в домене мал, а число строк, хранящих эти значения - огромно, путем кодирования в битмап-полях идентификаторов строк, в которых появляется то или иное значение/комбинация. В части скорости доступа к по настоящему большим наборам данных при строчном хранении - штука фантастическая, в обмен на жертвы в части совместной доступности таблиц для изменений и сжирание процессора до степени каления. во всяких, близких по объемам к настоящим, хранилищах поверх oracle database без этого вантуза не живут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 15:59 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
booby, я в общих словах знаю как работает bitamp-индекс. Но его сфера применения ограничена. Это поля с невысокой кардинальностью а также комбинации этих полей. Но я не понимаю каким образом эти знания соотносятся с тем примером что я приводил. Типичный запрос на выборки значений в диапазоне (index-scan): Код: plsql 1. Я рассматриваю generic database где у меня изначально нет иформации о том какие будут поля. Но я точно знаю что возможен (!) запрос по любому этому полю и по комбинации этих полей, а также запросы на "больше", "меньше" и запросы на IS NULL / IS NOT NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 16:06 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Марк, а что значит column-oriented? Вы имеете ввиду sql и nosql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 16:56 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton, про восстановление, похоже, ты меня неправильно понял - я не про логи, восстановление и целостность говорил совсем. вот твоя колоночная таблица coedbmsTable: name[Varchar2(100)] = {Маша,Вася, Вася, Петя, Федя, Ира, Паша, Витя, Саша, Галя, Валя} age[Number(3)] = {10 ,40 ,65 , 34 , 25 , 42 , 38 , 56 , 57 , 18 , 31 } вот запрос: select name,age from coedbmsTable where age between 10 and 30 вот результат, который вернул твой поиск: name[Varchar2(100)] = {Маша, Федя, Галя} age[Number(3)] = {10 , 25 , 18 } а клиенту, ты хочешь (можешь хотеть) отдать {{name, age} {Маша, 10}, {Федя, 25}, {Галя, 18} } то есть преобразовать результат из колоночного преставления в вариант строчного. то есть восстановить строки из колонок - в этом смысле. и в этой логике нет никаких хранимых идентификаторов строк. ------------------------------ - по поводу остального ты говоришь примерно следующее (я так тебя понимаю): 1) индекс позволяет а) осуществить поиск значения строки за логарифмическое время и б) автоматически поддерживают сортировку по возрастанию-убыванию значений. гут - хочу - пусть у меня хранение каждой колонки будет в виде индексного дерева. т.е. если в базе два Васи и одна Маша, то получится что-то такое {Вася:32CEA158B6D90409E0530820A8C012BB, Вася:32CEA158B6D90409E0530820A8C013BB, Маша:32CEA158B6D90409E0530820A8C011BB} или такое {Вася:{32CEA158B6D90409E0530820A8C012BB,32CEA158B6D90409E0530820A8C013BB}, Маша:32CEA158B6D90409E0530820A8C011BB} здесь Васю сжали для экономии места, но без задействования битмап-карт 2) тогда сама таблица выродится в набор идентификаторов строк (rid/rowid/"номеров_строк" - guid), к которым и будут привязаны хранимые в индексе значения,а хранить его тоже в индексе, чтобы быстро добираться до идентификатора строки по его значению. 3) а чтобы восстановить строку по условию name='Maша' (Маша - уникальна) я полезу в столбец name и по ключу 'Маша' отыщу хранимый в индексе идентификатор строки, найду в индексе {'Маша:32CEA158B6D90409E0530820A8C011BB'}, далее, т.к. просили меня Select *, то используя уже '32CEA158B6D90409E0530820A8C011BB' я полезу в индексы, обратные к виду {ключ=значение_поля, значение = идентификатор строки таблицы} индексирующие сами идентификаторы строк, вида {{32CEA158B6D90409E0530820A8C011BB:10}}, каждый из которых будет уникальным. В простом случае даже можно себе представить что такой "обратный", "восстанавливающий" индекс - один - общий на все столбцы. и имеет вид {{32CEA158B6D90409E0530820A8C011BB:{name='Маша',age=10}} (но это есть строчное представление в конечном счете) Т.е. в такой системе хранимые значения задвоятся, а идентификаторы строк размножатся по числу полей. битмап здесь при том, что число имен людей и и мощность множества их возрастов, выраженная в годах, много меньше числа людей и может появиться желание перейти к более компактному представлению по отношению даже к сжатому Вася:{32CEA158B6D90409E0530820A8C012BB,32CEA158B6D90409E0530820A8C013BB} фиксируя местоположения идентификаторов встречающихся строк с именем Вася в некоторой битовой карте представляющей разом все множество наличных строк. а если захочется разные поля хранить в индексах различных систем устройства, то (к описателю поля) надо добавить знание о типе индекса, чтобы задействовать правильный алгоритм поиска в специфическом индексе. как-то так я увидел твои намерения. И задачу сформулировал бы так: Можно ли придумать такую систему хранения (вероятно - граф некоего сорта), которая была бы быстрой на поиске как b-tree индекс и универсальной по отношению к выбранному набору полей для которого формулируется условие поиска. Для начала - безотносительно к сложности модификации данных на такой структуре. Не знаю, на сколько это идея удачна, но, может быть, есть смысл посмотреть в сторону алгоритмов поиска на строках. Подразумевая, что хранимая строка данных это буквально строка и ставится задача сопоставления против множества образцов. Такой Ахо-Корасик, вживленный в инмемори субд. (Деревья для таких поисков желательно простроить их начала) Еще раз сорри - я не для поучать, а так - на поговорить заскочил, пока коньячок согревается. А так мне менять позицию надо - вот уже и аромат из бокала выпирать начал - пора. Для начала без учета проблемы модификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 17:35 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
booby, авторТакой Ахо-Корасик, вживленный в инмемори субд. впрочем, больше на на regexp похоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 17:43 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
booby я чуть позже откоменчу когда осмыслю. А щас чтоб не быть многословным я приаттачу картинку. Здесь описана пока идея. Отображение таблицы dept см. выше на in-memory model. Овалами обзначены поля. Стрелками - указатели. В виде Red/Black деревьев - индексы. data-row представляет собой однонаправленный список из атомов. Поскольку последний элемент содержит бесполезный указатель - я его просто завернул на первый элемент. Надеюсь эта малая оптимизация позволит выбирать быстрее выборочно несколько колонок. Например первую и последнюю. Корневыми вершинами в этой сети являются корни индексов. Собственно итератора по таблице нет. Его заменяет обход любого индекса. В зависимости от его выбора мы получаем разный способ сортировки. Что еще я не решил: 1) Как представлять null 2) Как делать DML операции 3) Как быть с типами данных (пока все - строки) 4) Как делать комбинацию сразу двух индексов оптимально если выражение WHERE содержит таковые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 20:40 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Ей аналог в Oracle: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 20:45 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonЯ просто искал структуру данных или хранения данных которая позволяла-бы работать с таблицей так как будто у нее все поля всегда проиндексированы. Мне казалось что это достижимо для CODBMS Извиняюсь, вчера не понял о чем речь. ИМХУ теже яйца только в профиль. Тут сразу возникает проблема: выбрали быстро нужные элементы из одного столбца и получили проблему как выбрать сопутствующие значения из остальных столбцов. Нужен отдельный индекс по каждому столбцу (номер записи - значение), т.е. от чего ушли (доп индексы) к тому и пришли. Плюс разве что в том, что если из 100 столбцов надо 3-4, то будут обработаны 3-4. Но как правило в нормализованных таблицах нет 100 столбцов и нужны если не все, то почти все. Т.е. тупик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 21:09 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dima TИзвиняюсь, вчера не понял о чем речь. ИМХУ теже яйца только в профиль. Тут сразу возникает проблема: выбрали быстро нужные элементы из одного столбца и получили проблему как выбрать сопутствующие значения из остальных столбцов. Нужен отдельный индекс по каждому столбцу (номер записи - значение), т.е. от чего ушли (доп индексы) к тому и пришли. Я видимо не до конца нарисовал. Все индексы по всем столбцам есть. Изначально. Вся база данных - это суть - паутина индексов. Таблицы как таковой нет. Она - метафора. Связный список нескольких атомов. А учитывая мою модель у нас нет дубляжа ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 21:13 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dima TПлюс разве что в том, что если из 100 столбцов надо 3-4, то будут обработаны 3-4. Но как правило в нормализованных таблицах нет 100 столбцов и нужны если не все, то почти все. Т.е. тупик. По поводу 100 столбцов. Ты мне подкинул мысль. Наверное список атомов в data-row должен быть двухсвязным чтобы листать от 99-го поля к 30-му к примеру. Тоесть проще обходить против часовой стрелки. Или вообще сделать скип-список. Прыгать не через 1 а через 2 элемента.... правда это все требует моделирования чтоб оценить потери на сторедже... так даже не могу прикинуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 21:16 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonЯ видимо не до конца нарисовал. Все индексы по всем столбцам есть. Изначально. Вся база данных - это суть - паутина индексов. Таблицы как таковой нет. Она - метафора. Связный список нескольких атомов. А учитывая мою модель у нас нет дубляжа ключей. Я это понял. Потому и написал нужен индекс индекса. Например таблица RowNameAge1Вася102Петя83Коля14 Превратится в Код: plaintext 1. тут быстро нашли что Row = 3 а дальше надо искать в Name где Row == 3, т.е. или перебор или надо индекс. Вот я к чему. Если полей много, то по каждому надо искать, т.е. еще доп.тормоз. Тупик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 21:27 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dima TДопустим надо выбрать select Name where Age = 14 тут быстро нашли что Row = 3 а дальше надо искать в Name где Row == 3, т.е. или перебор или надо индекс. Вот я к чему. Если полей много, то по каждому надо искать, т.е. еще доп.тормоз. Тупик. Нет. Забудь про Row. Нету никаких Row. Нету ROW_ID, нету порядковых номеров строк как Dbf. Есть память. В ней лежат поля. Такого вида Код: plaintext 1. 2. 3. 4. 5. И есть Красно черная нода индекса. Которая смотрит в два поля. Либо в NULLS если она листовая. Код: plaintext 1. 2. 3. 4. 5. 6. Вот на этих двух структурах я думаю можно построить такую In-Memory Dbms. По поводу простых запросов типа Код: sql 1. Работать будет 100%. А вот как сделать сочетание двух условий... я над этим думаю. Код: sql 1. Пока дошел до того что нужен merge двух R/B деревьев. Или поддеревьев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 22:03 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton, И есть Красно черная нода индекса. Которая смотрит в два поля. Либо в NULLS если она листовая. Тьфу. В одно поле. И в два своих листика (опционально). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 22:08 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Я дорисовал картинку. (Сорри за рыбий глаз. Фотик сдох. Снимаю регистратором.) Я дорисовал еще 2 индекса на тестовых данных из таблицы DEPT Из учебного набора Oracle. И добавил для fields указатели в обратную сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2016, 22:15 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton... Пока дошел до того что нужен merge двух R/B деревьев. Или поддеревьев. А как ты планируешь мержить свои деревья, если узел одного из них указывает на экземпляр значения 'Вася', а узел другого указывает на экземпляр значения '10'. Карл, на что должен указывать узел дерева, полученного как результат слияния первых двух? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 00:15 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Я как-раз думаю над этим. Пока есть два направления: Выбор самого селективного индекса. А остальные - игнорировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 00:30 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonНет. Забудь про Row. Нету никаких Row. Нету ROW_ID, нету порядковых номеров строк как Dbf. Есть память. В ней лежат поля. Такого вида ... По поводу простых запросов типа Код: sql 1. Работать будет 100%. Ничего не понял. Как тут обратно строка соберется? Чувствую что твоя мысль уже где-то далеко и мне ее не догнать :) Почитал вики : плюсы в выборке, точнее в ускорении чтения с HDD, т.к. данные столбца хранятся компактнее чем в табличном виде, т.е. читать надо меньше. Но для in-memory это фиолетово, нет такой большой разницы в чтении из кэша проца и из RAM, как с HDD и из RAM, т.е. тут этот плюс исчезает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 10:16 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dima TНичего не понял. Как тут обратно строка соберется? Чувствую что твоя мысль уже где-то далеко и мне ее не догнать :) Смотри мой рисунок. Как только ты нашел field. Ты по горизонтальному указателю по кольцевому списку соберешь всю строку. P.S. Моя мысль пока еще недалеко потому что я ее думаю всего 3 дня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 12:10 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dima T Почитал вики : плюсы в выборке, точнее в ускорении чтения с HDD, т.к. данные столбца хранятся компактнее чем в табличном виде, т.е. читать надо меньше. Но для in-memory это фиолетово, нет такой большой разницы в чтении из кэша проца и из RAM, как с HDD и из RAM, т.е. тут этот плюс исчезает. Я тоже почитал вики. И пришел к следующему: 1) То что я нарисовал на картинке - это никакая ни column-oriented dbms. 2) Я отказываюсь от названия топика и пересоздам новую тему. Возможно это будет нечто вроде Cell-Oriented-Dbms, или Index-Oriented e.t.c. Я еще откомменчу несколько каментов booby если у меня будет что сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 12:23 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonПривет человеки. Что нужно для создания своей in-memory Column-oriented dbms ? А именно - какие структуры данных юзаются? Как организовываются связи между элементами колонок. Как идут CRUD-операции? В этом сабже я разбираюсь примерно как корова в балете. Можете писать смело основы. Thnx. Я могу в принципе про это рассказать, но это долго очень. Вкратце, там супернормализация на уровне храненния данных. Вместо длинных значений хранятся короткие ссылки на заранее составленные словари доменов для колонки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2016, 12:33 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonЗадам другой вопрос. Правильно ли я понял что CODBMS всегда сортируют значения в колонках ? нет. неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 09:59 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonТогда я разочарован. Я просто искал структуру данных или хранения данных которая позволяла-бы работать с таблицей так как будто у нее все поля всегда проиндексированы. Мне казалось что это достижимо для CODBMS там прикол другой, там подчас индексы не нужны вообще. за счет супернормализации и сжатия вся таблица влазит в кэш и без индекса работает быстрее, чем row wise с индексом, причем некритичные объемы там в 100-1000 раз больше, и не заметить, что не создал индекс на 10 миллионной таблице, очень легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 10:07 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonboobyпропущено... поясни - что и зачем ты хочешь делать по индексу (номеру/итератору) - а) обращаться к полю в строке таблицы или б) обращаться по номеру к конкретной строке таблицы в) что-то третье (вычитывать подряд данные строк с 5 по 50 принадлежащие к 17-му столбцу) ОК. Я польщен конечно что ты написал так много букв. Но можно было и короче. В режиме диалога. Зайду с другой стороны. В 2007 году произошла некотороая маленькая тех. революция. Поступили в продажу SSD-накопители. Что для нас, айтишников это означает? И что означает для DBA-ев. лично мое мнение - это ничего не значит пока что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 10:09 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
MasterZivЯ могу в принципе про это рассказать, но это долго очень. Вкратце, там супернормализация на уровне храненния данных. Вместо длинных значений хранятся короткие ссылки на заранее составленные словари доменов для колонки. Я понял. Это мне напомнило опцию COMPRESSED FOR OLTP в Oracle. Начиная толи с 11 толи с 12 версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 11:12 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
MasterZivmaytonТогда я разочарован. Я просто искал структуру данных или хранения данных которая позволяла-бы работать с таблицей так как будто у нее все поля всегда проиндексированы. Мне казалось что это достижимо для CODBMS там прикол другой, там подчас индексы не нужны вообще. за счет супернормализации и сжатия вся таблица влазит в кэш и без индекса работает быстрее, чем row wise с индексом, причем некритичные объемы там в 100-1000 раз больше, и не заметить, что не создал индекс на 10 миллионной таблице, очень легко. Ты где-то писал что работал с Vertica? Или мне показалось. Не могу вспомнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 11:13 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonMasterZivпропущено... там прикол другой, там подчас индексы не нужны вообще. за счет супернормализации и сжатия вся таблица влазит в кэш и без индекса работает быстрее, чем row wise с индексом, причем некритичные объемы там в 100-1000 раз больше, и не заметить, что не создал индекс на 10 миллионной таблице, очень легко. Ты где-то писал что работал с Vertica? Или мне показалось. Не могу вспомнить. Да, Работаю сейчас прямо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 12:32 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonMasterZivЯ могу в принципе про это рассказать, но это долго очень. Вкратце, там супернормализация на уровне храненния данных. Вместо длинных значений хранятся короткие ссылки на заранее составленные словари доменов для колонки. Я понял. Это мне напомнило опцию COMPRESSED FOR OLTP в Oracle. Начиная толи с 11 толи с 12 версии. Марк, columnstore исключительно для OLAP/DSS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 12:33 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
mayton... 2) Я отказываюсь от названия топика и пересоздам новую тему. Возможно это будет нечто вроде Cell-Oriented-Dbms, или Index-Oriented e.t.c. Искал себе быстрый локальный движок, нашел три решения: 1. Google Level DB 2. SQL Lite 4 3. Tokyo cabinet http://fallabs.com/tokyocabinet/ + всякие самопальные реализации Hash / Btree на диске. Поскольку мне скорости SQL Lite 3 для практических задач вполне хватает, даже не смотрел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 12:48 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
MasterZivmaytonпропущено... Я понял. Это мне напомнило опцию COMPRESSED FOR OLTP в Oracle. Начиная толи с 11 толи с 12 версии. Марк, columnstore исключительно для OLAP/DSS. Да я не спорю о классах БД. Просто то что ты рассказал по сжатию справочника домена колонки похоже на опции Oracle Advanced Compression. http://www.oracle.com/technetwork/database/focus-areas/storage/advanced-compression-whitepaper-130502.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 13:04 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev+ всякие самопальные реализации Hash / Btree на диске. Поскольку мне скорости SQL Lite 3 для практических задач вполне хватает, даже не смотрел Не смотрел на Berkeley-Db? P.S. Я пошел по неверному пути Паниковского Базиста... Стал думать о своей dbms. Кошмар! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 13:55 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
maytonНе смотрел на Berkeley-Db? Он вроде сейчас коммерческий ((( Хотел Google Level DB посмотреть, но не нашел нормального собранного бинарника под Windows ((( Собирать самому влом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 14:57 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, не может быть что коммерческий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 15:04 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Oracle Berkeley DB Licensing Information Oracle employs a dual licensing model that offers customers a choice of either our open source license or a commercial license. Our open source license is OSI-certified and permits use of Berkeley DB in open source projects or in applications that are not distributed to third parties. Our commercial license permits closed-source distribution of an application to third parties and provides business assurance. .... Х.з. Я не юрист. Но когда рядом с опен-соурс еще и коммерческую лицензию продают - меня это отпугивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 15:08 |
|
||
|
Тяпничная Column-oriented dbms
|
|||
|---|---|---|---|
|
#18+
Dima T, OfftopicДима. Приколись как чувак простые числа считает http://www.sql.ru/forum/1213226/3iy-den-nichego-ne-vyhodit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2016, 16:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018523]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 281ms |
| total: | 437ms |

| 0 / 0 |
