Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 О хранении разреженных массивов  [new]
Выбегалло
Member

Откуда: Scottsdale, AZ, USA
Сообщений: 3823
а точнее - о понимании различия между логическими и физическими уровнями.
Нам тут мумпсятники в нос тыкали разреженными массивами, мол, их хранить неудобно, много места теряется в таблице с 1001 колонкой, 999 из которых пустые.
Так вот, дорогие мои сторонники мумпса : есть такая вполне себе реляционная субд Sybase IQ. Которая хранит данные на физическом уровне по столбцам. И вот в ней хоть тесять тысяч колонок в таблице заведите, но если в них ничего нет - то и на диске ничего не хранится.

В таком вот аксепте
23 янв 07, 20:54    [3683417]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Изопропил
Member

Откуда:
Сообщений: 31629
Один бит (NULL FLAG) на поле на таблице шириной в 1024 колонки - доп расход максимум 128 байт.
Индексы не пострадают, NULL в них писать незачем.
23 янв 07, 21:32    [3683526]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
mv
Member

Откуда:
Сообщений: 8876

Выбегалло


А что, кто-то понимает разреженные массивы как "редкозаполненные"?


Posted via ActualForum NNTP Server 1.3

23 янв 07, 22:37    [3683671]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
Выбегалло
но если в них ничего нет - то и на диске ничего не хранится.

Ну слава богу, мы уж переживать начали.
23 янв 07, 23:11    [3683785]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Выбегалло
Member

Откуда: Scottsdale, AZ, USA
Сообщений: 3823
mv

Выбегалло


А что, кто-то понимает разреженные массивы как "редкозаполненные"?


Posted via ActualForum NNTP Server 1.3


а кто-то нет ? Кому-то непонятно, что в 99.(9) случаев фоновым элементом будет NULL ?
24 янв 07, 00:37    [3683935]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
mv
Member

Откуда:
Сообщений: 8876

Выбегалло

а кто-то нет ? Кому-то непонятно, что в 99.(9) случаев фоновым элементом
будет NULL ?

Ну, удачи вам. Веселых гигабайтов. Заполненных Null - ами.


Posted via ActualForum NNTP Server 1.3

24 янв 07, 05:04    [3684063]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
мод
Guest
Выбегалло
а точнее - о понимании различия между логическими и физическими уровнями.

К вопросу о понимании. Отсутствие элемента массива - это не пустое поле, а отсутствие самой записи, так что вообще ничего не хранится.
24 янв 07, 09:19    [3684491]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Мыш Летучий
Member

Откуда:
Сообщений: 47
Выбегалло
а точнее - о понимании различия между логическими и физическими уровнями.
Нам тут мумпсятники в нос тыкали разреженными массивами, мол, их хранить неудобно, много места теряется в таблице с 1001 колонкой, 999 из которых пустые.
Так вот, дорогие мои сторонники мумпса : есть такая вполне себе реляционная субд Sybase IQ. Которая хранит данные на физическом уровне по столбцам. И вот в ней хоть тесять тысяч колонок в таблице заведите, но если в них ничего нет - то и на диске ничего не хранится.

В таком вот аксепте

можно и попугая научить курить.
))) чего только не сделают с таблицами,
чтобы сделать их "наиболее эффективной и универсальной формой хранения данных".
24 янв 07, 09:28    [3684578]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Мыш Летучий
можно и попугая научить курить.
))) чего только не сделают с таблицами,
чтобы сделать их "наиболее эффективной и универсальной формой хранения данных".


Конечно, не все же такие умные, чтобы хранить ВСЕ возможные разновидности таблиц в ISAM
24 янв 07, 09:33    [3684610]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Изопропил
Member

Откуда:
Сообщений: 31629
Неплохо бы поиметь в студии определение разреженного массива.
24 янв 07, 09:51    [3684766]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30267
автор
Неплохо бы поиметь в студии определение разреженного массива.

это такие массивы, редкие.

если серьезно, то в М хранение данных организовано обычным страничным B-деревом, у которого используется динамический "составной" ключ, с произвольной длиной ключа. И вместо ссылки на данные у обычного индекса хранятся сами данные (тоже произвольной длины, в тех версиях М с которыми я работал, до 255 символов).

почему разработчики М называют это "разреженным массивом" - я не знаю.
24 янв 07, 10:18    [3684985]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
ModelR
Member

Откуда: Нижний Новгород
Сообщений: 1798
Тогда сначала что есть массив.
Например двумерным массивом назовем
отношение R(X1:T1,X2:T2,A:TA), на котором определена функциональная зависимость
F:(X1,X2)->A.

1) разреженность относительно текущего значения R :
R[X1,X2] < R[X1]*R[X2]

2) разреженность относительно области определения ФЗ:
R[X1,X2] < T1*T2
24 янв 07, 10:55    [3685365]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Andreww
Member [заблокирован]

Откуда:
Сообщений: 1752
2 kdv

Вам как работавшему с М и свободному от догм, вопрос.

kdv
в М хранение данных организовано обычным страничным B-деревом, у которого используется динамический "составной" ключ


А в памяти-то массивы (т.е. просто кусок памяти с адресацией) есть ?

А то чего-то я читал документацию по "будущему человечества постреляционной объектной (другие страшные слова добавить по вкусу) субд СФСРУ" нигде не увидал про работу с памятью, локаль, глобаль, туманные намёки, на то что хранится (я про память) всё в узлах и типа "так же как на диске".
24 янв 07, 11:47    [3685935]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Andreww
Member [заблокирован]

Откуда:
Сообщений: 1752
СФСРУ следует читать как CACHE :)
24 янв 07, 11:48    [3685954]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30267
автор
А в памяти-то массивы (т.е. просто кусок памяти с адресацией) есть ?

конечно есть. собственно,
set a(15)=10
и
set ^a(15)=10

отличаются только тем, что ^a будет сохранено на диск. А без "зычки" - в памяти. А какие уж они в памяти, "разреженные" или нет - это я не знаю.
"мерность" массивов в памяти, если мне память не изменяет :-), аналогичная дисковым.
24 янв 07, 15:46    [3688384]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30267
маркетоидная активность InterSystems построена на следующем:
CACHE представляет собой комбинацию из ядра нижнего уровня и нескольких надстроек.

1. собственно, ядро и язык M. Это то, где нет никаких объектов, SQL и прочего. Сплошные "разреженные массивы" что в памяти что на диске. Язык - интепретируемый.
для работы с массивами существует ряд операций: прямая запись и чтение, и перебор - получение следущего узла индекса на этом уровне или по уровню вглубь.
Например, мы сделали "массив" на диске (что присваивается элементам массива - в данном примере пофиг. в переменная в памяти - "локаль", на диске - глобаль)

set ^a(1)=..
set ^a(2)=..
set ^a(3)=..

потом захотели добавить "измерение" на уровень 2. и добавили
set ^a(2, 1)=...
set ^a(2, 'a)= ...
и так далее. Так вот, если в цикле применить $o(^a(x)) то оно будет "перебирать" элементы первого уровня, т.е. 1,2, 3. Если другую конструкцию (в диамсе 3.1 было $zo()), то будет перебирать 1, 2, 2.1, 2.а, 3.

Собственно, все. А. В конструкции ^a(1)=x значение x - строка. Чисел как таковых явно нет, т.е. они есть, но отличить в переменной число от строки можно написав if +a ...
"атрибуты" в M обычно хранят по образу
set ^a(1)='field1|field2|field3|'
в качестве разделителя может выступать любой символ. Есть функции вытаскивания "поля" из такой строки - $extract, $piece и т.п.

2. Поверх этого дела в CACHE есть надстройка SQL. Можно создавать "таблицы", но они превращаются в глобали этой прослойкой. Т.е. это эмуляция РМД

3. опять же поверх М есть надстройка Cache Object Language (или Script). Это объекты, которые при хранении опять же проецируются на глобали, но как то там можно писать триггеры и т.п.


Собственно, все, про "пост-реляционные" СУБД. :-)

Да. И разработчики, которые активно используют CACHE, они прослойку SQL практически никогда не используют, да и понятно, что тут она как козе баян. В основном используют М и COS.
24 янв 07, 15:58    [3688487]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
ModelR
Member

Откуда: Нижний Новгород
Сообщений: 1798
kdv
"атрибуты" в M обычно хранят по образу
set ^a(1)='field1|field2|field3|'
А можно наверно и
set ^a(1,'field_name1')='field1'
set ^a(1,'field_name2')='field2'
?
24 янв 07, 16:49    [3688968]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Изопропил
Member

Откуда:
Сообщений: 31629
ModelR
kdv
"атрибуты" в M обычно хранят по образу
set ^a(1)='field1|field2|field3|'
А можно наверно и
set ^a(1,'field_name1')='field1'
set ^a(1,'field_name2')='field2'
?


Может быть и можно, но в примерах на M частенько наблюдается хранение информации не только в листьях, но и узлах

s ^a(1)='field1|field2|field3|'
s ^a(1,102)='line1'
s ^a(1,103)='line2'

при обходе дерева атрибуты от элементов(говоря языком XML) придётся, а даже намёка на схему в М я пока не обнаружил
24 янв 07, 17:11    [3689181]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Выбегалло
Member

Откуда: Scottsdale, AZ, USA
Сообщений: 3823
мод
Выбегалло
а точнее - о понимании различия между логическими и физическими уровнями.

К вопросу о понимании. Отсутствие элемента массива - это не пустое поле, а отсутствие самой записи, так что вообще ничего не хранится.


К вопросу о понимании : вполне себе реляционная СУБД Sybase IQ таки да, ничего не хранит.
Как я уже говорил. Или до мумсоидов с первого раза не доходит ?
24 янв 07, 18:31    [3689756]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Выбегалло
Member

Откуда: Scottsdale, AZ, USA
Сообщений: 3823
Изопропил
Неплохо бы поиметь в студии определение разреженного массива.


Массив, в основном содержащий "фоновый элемент" (в условиях СУБД - чаще всего NULL)
24 янв 07, 18:33    [3689763]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30267
ModelR
А можно наверно и

можно. смотря что делать. Можно вообще так:
set ^buh('накладные', 1)=...
set ^buh('счета-фактуры', 55)=...
set ....

для ссылок приходится делать отдельные узлы или глобали. например:
set ^a("транзисторы", "кт315а")="50/50/15/22/77"

если надо "сортировку" по параметру 1, то тогда делаем
set ^a("транзисторы по ...", 50)="кт315а"
таким образом мы можем при быстром доступе к "параметру" получить
"идентификатор" ссылки на полную "запись".
и т.д.

Изопропил
а даже намёка на схему в М я пока не обнаружил

по идее, она якобы не нужна. или ее можно хранить в другой глобали. или в этой же...
24 янв 07, 18:47    [3689835]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
Изопропил
Member

Откуда:
Сообщений: 31629
Выбегалло
Изопропил
Неплохо бы поиметь в студии определение разреженного массива.


Массив, в основном содержащий "фоновый элемент" (в условиях СУБД - чаще всего NULL)


Тогда нужно постороить сначала отображение М-структуры на массив и только после этого рассуждать о "разреженности" массива
24 янв 07, 18:55    [3689882]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
nik_x
Member

Откуда:
Сообщений: 1887
Изопропил
Неплохо бы поиметь в студии определение разреженного массива.


Типа прикалываешься?
Сам попросил!:

• Массив – упорядоченный список, в котором все подсписки одного уровня имеют одинаковую длину.
• Вектор – одномерный массив, т.е. элементы массива не являются списками.
• Матрица – двумерный массив, подсписки которой имеют такую же длину, как и сама матрица. В более общем случае под матрицей предполагается двумерный массив.
• Под строками матрицы m понимают ее подсписки (т.е. m[]), а под столбцами – списки, состоящие из элементов подсписков, находящихся на одинаковых позициях (т.е. m[[All,i]]).
• Массивы, имеющие большую часть элементов равными нулю, т.е. больше половины массива, называются разреженными.
25 янв 07, 05:48    [3690647]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
MX -- ALEX
Guest
nik_x
Изопропил
Неплохо бы поиметь в студии определение разреженного массива.


Типа прикалываешься?
Сам попросил!:

• Массив – упорядоченный список, в котором все подсписки одного уровня имеют одинаковую длину.
• Вектор – одномерный массив, т.е. элементы массива не являются списками.
• Матрица – двумерный массив, подсписки которой имеют такую же длину, как и сама матрица. В более общем случае под матрицей предполагается двумерный массив.
• Под строками матрицы m понимают ее подсписки (т.е. m[]), а под столбцами – списки, состоящие из элементов подсписков, находящихся на одинаковых позициях (т.е. m[[All,i]]).
• Массивы, имеющие большую часть элементов равными нулю, т.е. больше половины массива, называются разреженными.


-- может ли "m" быть не числом ?
-- а если часть элементов вообще отсутствует ?
-- а если "большая часть элементов " is Null ?
25 янв 07, 08:46    [3690853]     Ответить | Цитировать Сообщить модератору
 Re: О хранении разреженных массивов  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30267
nik-x
Типа прикалываешься?
Сам попросил!:

• Массив – упорядоченный список, в котором все подсписки одного уровня имеют одинаковую длину.


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

Но называть глобали "разреженным массивом" - imho криво, неправильно, и путает тех, кто не в курсе. Хотя м.б. и звучит.
- А как вы храните данные!
- Данные у нас хранятся в разреженных массивах!
- 8-0

это смешно даже по отношению к РСУБД, где таблица, сиречь "массив записей", является даже не "разреженным массивом", а неупорядоченным множеством. Тут, собственно, и разница моделей данных. М это работа с упорядоченными массивами (как правило перебор элементов массива), а Р - работа с множествами (операции над множествами).
25 янв 07, 10:10    [3691245]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить