powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / способ хранения большой матрицы?
28 сообщений из 28, показаны все 2 страниц
способ хранения большой матрицы?
    #34227297
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доброго времени суток!
подскажите пожалуйста способ хранения следующей структуры:
матрица порядка (500 000) х (20 000), но информация есть примерно в 1% ячеек. к данной информации будет осуществляться доступ через борланд делфи с применением различных процедур обработки итд., поэтому желательно, чтобы каждую ячейку можно было бы достаточно оперативно найти.
в чем лучше хранить данную структуру? в память она, к сожалению, не влазит, а с базами данных я до сих пор не очень общалась, так что представления не имею, куда влезет столько информации и что сможет эту информацию оперативно подавать.
буду благодарна за любую инфу, спасибо.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227384
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое, что пришло с голову. Создайте таблицу, ключами которой будут индексы матрицы плюс поле, в котором будет содержаться значение.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227413
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас это все именно так и выглядит - инфу из текстовых файлов я закинула в ms access, получилось две базы данных по 99 таблиц в каждой и в среднем 300-400 тыс. записей в каждой таблице (просто меня интересовал общий объем данных). вообщем-то ввиде такой таблицы хранить данную инфу было бы логичнее всего, но где (в какой системе?) лучше делать эту базу, т.е. буквально на чем ее писать и как в нее закидывать данные - я с базами данных до этого не работала ):
слышала про какие-то dump файлы что ли.. но толком ничего не знаю. может линки какие хоть дадите на почитать? или еще чего полезного..
потому что получается даже при 1% заполненности матрицы около 8 миллиардов рядов в таблице с 3 полями. а еще мне нужна оперативность, чтобы из делфи я могла создать коннекшн и быстро эти данные туда-сюда гонять.. /:
спасибо..
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227478
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то таблица должна быть одна, с индексированными значениями колонки и строки.
...Забей на это дело, или найми грамотного спеца, он фсё сделает...
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227503
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xВообще-то таблица должна быть одна, с индексированными значениями колонки и строки.
...Забей на это дело, или найми грамотного спеца, он фсё сделает...

nik_x, проблема у барышни не в организации таблиц или БД, а в выборе БД. Точнее - СУБД, которая создаст БД, в которой улягутся "8 миллиардов рядов ... с 3 полями".
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227513
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то я делал шаблон C++ класса для операций с огромными массивами. Реально сам массив хранился в файле. В памяти кэшировалось определенное количество элементов этого массива. По факту обращения к какому-то элементу он либо читался с диска, либо брался из кэша. При заполнении кэша и необходимости прочитать с диск еще один элемент, на диск выгружался элемент к которому наиболее долго не было обращений.
Для двумерных и более-мерных массивов элементом моего массива был обычный массив.

Такой метод вполне подходит для алгоритмов с последовательным просмотром, например, для многих графических операций с изображениями.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227525
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadmindedматрица порядка (500 000) х (20 000), но информация есть примерно в 1% ячеек. nomadmindedпотому что получается даже при 1% заполненности матрицы около 8 миллиардов рядов в таблице с 3 полями.если не ошибаюсь, 1% от 500000*20000 = 100000000, т.е. всего 100 миллионов.

Кстати, если размер одной ячейки матрицы будет единицы байт, то можно и в оперативку попробовать уместиться...
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227561
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re: miksoft
это тот самый простой вариант, который я пока могу реализовать. но трабл заключается в том, что при хранении массива в файле не достигается нужная оперативность. не знаю, будет ли работать быстрее подключение к базе данных и retrieve инфы из нее.. хранение данных в памяти было бы самым идеальным вариантом. но они туда не влезают ):
а потом, если весь массив закинуть в файл, то каким образом осуществлять поиск? только последовательный просмотр - это смерть врагам при таком-то объеме..
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227573
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re: miksoft
Кстати, если размер одной ячейки матрицы будет единицы байт, то можно и в оперативку попробовать уместиться...
как минимум 3 байта, т.к. надо хранить в ней цифру от 1 до 5.
но ведь не влезет в оперативку 100 миллионов? или..?
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227593
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadmindedа потом, если весь массив закинуть в файл, то каким образом осуществлять поиск? только последовательный просмотр - это смерть врагам при таком-то объеме..Ну так кладите в любую СУБД. 100 миллионов записей при правильной индексации и методах работы - не проблема.

Более конкретно можно было бы что-то посоветовать, если бы Вы описали операции, которые надо будет производить с этой матрицей.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227595
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
перепутала.. 3 бита!
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227600
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadmindedre: miksoft
как минимум 3 байта, т.к. надо хранить в ней цифру от 1 до 5.
но ведь не влезет в оперативку 100 миллионов? или..?
Конечно, не влезет. Ведь кроме значения Вам ещё и индексы надо хранить :-). 200 миллионов.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227619
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re: miksoft
miksoftБолее конкретно можно было бы что-то посоветовать, если бы Вы описали операции, которые надо будет производить с этой матрицей.
вообщем-то важен наверное только оперативный доступ к любой ячейке, ибо все операции все же с полученными из этих ячеек данными я буду производить в делфи (по-моему так будет логичнее и проще мне писать сами алгоритмы). например, буду применять алгоритм ближайших соседей построчно. то есть мне надо найти для каждой строки n строк с похожими ячейками в них. или по колонкам тоже самое.
ну и соответственно заполнение пустых ячеек вычисленными данными.
с индексированием я, к сожалению, тоже не очень дружу. нормализация/оптимизация баз данных приходит после того, как разберешься в самих базах данных..
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227640
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re: Rin@t
Rin@t
Конечно, не влезет. Ведь кроме значения Вам ещё и индексы надо хранить :-). 200 миллионов.
получается 7 байт на запись - индекс 1..500 000 = integer, индекс 1..20 000 = word, значение = byte.
если записей 100 миллионов, то нужно 700 миллионов ячеек памяти, а я правильно понимаю, их у нас 1 миллиард?
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227641
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadmindedс индексированием я, к сожалению, тоже не очень дружу. нормализация/оптимизация баз данных приходит после того, как разберешься в самих базах данных..

Под "индексами" в данном случае подразумевались "координаты элемента в матрице". Как же без них-то родимых. В общем, вам нужно произвести выбор БД, а это тема другого топика.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227662
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну если не принимать во внимание дополнительные структуры (индексы и прочее) и не очень плотно упаковывать данные, то потребуется (3+2+1)*100 000 000=600 000 000 байт. Т.е. в оперативку на современной машине уместиться все-таки возможно. При использовании более сложной структуры (если номер строки хранить только один раз), то будет достаточно (3*500000)+(2+1)*100 000 000~=300 Мб.

Если значений так мало (всего пять), то их можно не хранить вообще, а хранить только пять массивов координат ячеек, которые имеют соответсвующие значения. Это, кстати, можно использовать и при хранении матрицы в СУБД.

Если объединить оба способа, то достаточно будет (3*500000)+(2*100 000 000) ~= 200 Мб.

Т.е. в оперативку уместиться вполне реально. Вопрос только в том, насколько быстро будет работать с такой структурой. Но это уже зависит от алгоритмов...
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227668
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
re: Rin@t
nomadmindedс индексированием я, к сожалению, тоже не очень дружу. нормализация/оптимизация баз данных приходит после того, как разберешься в самих базах данных..

Под "индексами" в данном случае подразумевались "координаты элемента в матрице". Как же без них-то родимых. В общем, вам нужно произвести выбор БД, а это тема другого топика.

это я в отношении следующей фразы имела ввиду:

miksoftНу так кладите в любую СУБД. 100 миллионов записей при правильной индексации и методах работы - не проблема.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227682
nomadminded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЕсли значений так мало (всего пять), то их можно не хранить вообще, а хранить только пять массивов координат ячеек, которые имеют соответсвующие значения. Это, кстати, можно использовать и при хранении матрицы в СУБД.

да, вы правы, почему-то мне самой эта идея в голову не пришла. тогда с обоими индексами и координатой значения я смогу уложиться в 400мб памяти.

спасибо огромное, что натолкнули на мысль! хотя к теме форума вроде не очень относится, но все же спасибо за оказанную помощь (:
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227695
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadmindedда, вы правы, почему-то мне самой эта идея в голову не пришла. тогда с обоими индексами и координатой значения я смогу уложиться в 400мб памяти.Если хранить данные построчно, то номер строки хранить можно будет только один раз, что сократит расходы памяти еще в пару раз.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227721
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadmindedхотя к теме форума вроде не очень относитсяОчень даже относится! Посмотрите внутреннюю структуру индексов в разных СУБД - увидите много общего.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227849
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft nomadmindedда, вы правы, почему-то мне самой эта идея в голову не пришла. тогда с обоими индексами и координатой значения я смогу уложиться в 400мб памяти.Если хранить данные построчно, то номер строки хранить можно будет только один раз, что сократит расходы памяти еще в пару раз.

Ну-у-у, тогда рекомендую почитать как устроен FAT у ... например Ёкселя.
...красно/черное дерево.

"
- Привет саксаул!
- Я не саксаул, я аксакал!
- А-а, всё равно - дерево...
"
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227864
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xНу-у-у, тогда рекомендую почитать как устроен FAT у ... например Ёкселя.
...красно/черное дерево.Не уловил вашей мысли насчет FAT :(
Как устроен FAT (если речь о файловой системе) я знаю, но каким боком он тут - не понимаю.
И причем тут "красно/черное дерево"?
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227880
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft nik_xНу-у-у, тогда рекомендую почитать как устроен FAT у ... например Ёкселя.
...красно/черное дерево.Не уловил вашей мысли насчет FAT :(
Как устроен FAT (если речь о файловой системе) я знаю, но каким боком он тут - не понимаю.
И причем тут "красно/черное дерево"?

Ну я же дал наводку... (про водку ни слова).
Копай в сторону описания FAT от MS Excel.
Там именно FAT, и именно дерево (хранения элементов в мозге).
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227891
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=366383
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34227897
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xКопай в сторону описания FAT от MS Excel.У меня FAT ну никак не ассоциируется с MS Excel.
На всякий случай поискал слово FAT в хелпе к MS Excel 2003 - пусто.

Если вы имеете в виду что-то конкретное - можно ссылочку?
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34228391
jnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подойдет любая СУБД (бери MSSQL или интербейз проблем с коннектом из дельфи не будет)
1. Зачем хранить пустые значения.
2. Табла получится простая и доступ к 100 мил. записей по индексу должен быть быстрым.
...
Рейтинг: 0 / 0
способ хранения большой матрицы?
    #34228586
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Их есть у меня.
Всю кухню мона сделять в 2 таблицах.
Даю структуру
1) таблица значений VALS
ID
VALUE
[VALUE1]
1 запись из этой таблицы это
1 элемент матрицы
2) таблица сссылок LINKS
V - отступ по ширине
H - отступ по высоте
LINKID - ссылка на таблицу значений(ID)
3) Мона накатать функцию, которая буит вытаскивать значения
из мматрицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 SET @VAR := NULL;
 SET @RETVAL :=NULL;
 SELECT LINKS.LINKID INTO @VAR FROM LINKS
 WHERE LINKS.H = <v1> AND
 LINKS.V = <v2>;
 IF IFNULL(@VAR, - 1 ) = - 1  THEN
 RETURN NULL
 ELSE
 BEGIN
   SET @RETVAL := NULL;
   SELECT VALS.VALUE INTO @RETVAL FROM VALS
   WHERE VALS.ID = @VAR;
 END;
Плюсы следующие:
+ Никаких лишних данных и пустых полей.
+ В качестве элемента матрицы может быть любая запись любой таблицы.
+ Насчет интерактивности, попробую погонять - скажу.
Думаю, фенечки додумаете.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
способ хранения большой матрицы?
    #35391863
zlachnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь использовал этот метод?
http://www.bluebit.gr/forum/Topic87-3-1.aspx
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / способ хранения большой матрицы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]