Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тяпничная 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 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39235950&tid=2018523]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 160ms |

| 0 / 0 |
