|
|
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
доброго времени суток! подскажите пожалуйста способ хранения следующей структуры: матрица порядка (500 000) х (20 000), но информация есть примерно в 1% ячеек. к данной информации будет осуществляться доступ через борланд делфи с применением различных процедур обработки итд., поэтому желательно, чтобы каждую ячейку можно было бы достаточно оперативно найти. в чем лучше хранить данную структуру? в память она, к сожалению, не влазит, а с базами данных я до сих пор не очень общалась, так что представления не имею, куда влезет столько информации и что сможет эту информацию оперативно подавать. буду благодарна за любую инфу, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 11:41 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
Первое, что пришло с голову. Создайте таблицу, ключами которой будут индексы матрицы плюс поле, в котором будет содержаться значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 11:55 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
сейчас это все именно так и выглядит - инфу из текстовых файлов я закинула в ms access, получилось две базы данных по 99 таблиц в каждой и в среднем 300-400 тыс. записей в каждой таблице (просто меня интересовал общий объем данных). вообщем-то ввиде такой таблицы хранить данную инфу было бы логичнее всего, но где (в какой системе?) лучше делать эту базу, т.е. буквально на чем ее писать и как в нее закидывать данные - я с базами данных до этого не работала ): слышала про какие-то dump файлы что ли.. но толком ничего не знаю. может линки какие хоть дадите на почитать? или еще чего полезного.. потому что получается даже при 1% заполненности матрицы около 8 миллиардов рядов в таблице с 3 полями. а еще мне нужна оперативность, чтобы из делфи я могла создать коннекшн и быстро эти данные туда-сюда гонять.. /: спасибо.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:00 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
Вообще-то таблица должна быть одна, с индексированными значениями колонки и строки. ...Забей на это дело, или найми грамотного спеца, он фсё сделает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:15 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nik_xВообще-то таблица должна быть одна, с индексированными значениями колонки и строки. ...Забей на это дело, или найми грамотного спеца, он фсё сделает... nik_x, проблема у барышни не в организации таблиц или БД, а в выборе БД. Точнее - СУБД, которая создаст БД, в которой улягутся "8 миллиардов рядов ... с 3 полями". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:22 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
Когда-то я делал шаблон C++ класса для операций с огромными массивами. Реально сам массив хранился в файле. В памяти кэшировалось определенное количество элементов этого массива. По факту обращения к какому-то элементу он либо читался с диска, либо брался из кэша. При заполнении кэша и необходимости прочитать с диск еще один элемент, на диск выгружался элемент к которому наиболее долго не было обращений. Для двумерных и более-мерных массивов элементом моего массива был обычный массив. Такой метод вполне подходит для алгоритмов с последовательным просмотром, например, для многих графических операций с изображениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:23 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nomadmindedматрица порядка (500 000) х (20 000), но информация есть примерно в 1% ячеек. nomadmindedпотому что получается даже при 1% заполненности матрицы около 8 миллиардов рядов в таблице с 3 полями.если не ошибаюсь, 1% от 500000*20000 = 100000000, т.е. всего 100 миллионов. Кстати, если размер одной ячейки матрицы будет единицы байт, то можно и в оперативку попробовать уместиться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:27 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
re: miksoft это тот самый простой вариант, который я пока могу реализовать. но трабл заключается в том, что при хранении массива в файле не достигается нужная оперативность. не знаю, будет ли работать быстрее подключение к базе данных и retrieve инфы из нее.. хранение данных в памяти было бы самым идеальным вариантом. но они туда не влезают ): а потом, если весь массив закинуть в файл, то каким образом осуществлять поиск? только последовательный просмотр - это смерть врагам при таком-то объеме.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:35 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
re: miksoft Кстати, если размер одной ячейки матрицы будет единицы байт, то можно и в оперативку попробовать уместиться... как минимум 3 байта, т.к. надо хранить в ней цифру от 1 до 5. но ведь не влезет в оперативку 100 миллионов? или..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:37 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nomadmindedа потом, если весь массив закинуть в файл, то каким образом осуществлять поиск? только последовательный просмотр - это смерть врагам при таком-то объеме..Ну так кладите в любую СУБД. 100 миллионов записей при правильной индексации и методах работы - не проблема. Более конкретно можно было бы что-то посоветовать, если бы Вы описали операции, которые надо будет производить с этой матрицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:42 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
перепутала.. 3 бита! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:42 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nomadmindedre: miksoft как минимум 3 байта, т.к. надо хранить в ней цифру от 1 до 5. но ведь не влезет в оперативку 100 миллионов? или..? Конечно, не влезет. Ведь кроме значения Вам ещё и индексы надо хранить :-). 200 миллионов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:43 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
re: miksoft miksoftБолее конкретно можно было бы что-то посоветовать, если бы Вы описали операции, которые надо будет производить с этой матрицей. вообщем-то важен наверное только оперативный доступ к любой ячейке, ибо все операции все же с полученными из этих ячеек данными я буду производить в делфи (по-моему так будет логичнее и проще мне писать сами алгоритмы). например, буду применять алгоритм ближайших соседей построчно. то есть мне надо найти для каждой строки n строк с похожими ячейками в них. или по колонкам тоже самое. ну и соответственно заполнение пустых ячеек вычисленными данными. с индексированием я, к сожалению, тоже не очень дружу. нормализация/оптимизация баз данных приходит после того, как разберешься в самих базах данных.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:49 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
re: Rin@t Rin@t Конечно, не влезет. Ведь кроме значения Вам ещё и индексы надо хранить :-). 200 миллионов. получается 7 байт на запись - индекс 1..500 000 = integer, индекс 1..20 000 = word, значение = byte. если записей 100 миллионов, то нужно 700 миллионов ячеек памяти, а я правильно понимаю, их у нас 1 миллиард? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:54 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nomadmindedс индексированием я, к сожалению, тоже не очень дружу. нормализация/оптимизация баз данных приходит после того, как разберешься в самих базах данных.. Под "индексами" в данном случае подразумевались "координаты элемента в матрице". Как же без них-то родимых. В общем, вам нужно произвести выбор БД, а это тема другого топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:54 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
ну если не принимать во внимание дополнительные структуры (индексы и прочее) и не очень плотно упаковывать данные, то потребуется (3+2+1)*100 000 000=600 000 000 байт. Т.е. в оперативку на современной машине уместиться все-таки возможно. При использовании более сложной структуры (если номер строки хранить только один раз), то будет достаточно (3*500000)+(2+1)*100 000 000~=300 Мб. Если значений так мало (всего пять), то их можно не хранить вообще, а хранить только пять массивов координат ячеек, которые имеют соответсвующие значения. Это, кстати, можно использовать и при хранении матрицы в СУБД. Если объединить оба способа, то достаточно будет (3*500000)+(2*100 000 000) ~= 200 Мб. Т.е. в оперативку уместиться вполне реально. Вопрос только в том, насколько быстро будет работать с такой структурой. Но это уже зависит от алгоритмов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 12:59 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
re: Rin@t nomadmindedс индексированием я, к сожалению, тоже не очень дружу. нормализация/оптимизация баз данных приходит после того, как разберешься в самих базах данных.. Под "индексами" в данном случае подразумевались "координаты элемента в матрице". Как же без них-то родимых. В общем, вам нужно произвести выбор БД, а это тема другого топика. это я в отношении следующей фразы имела ввиду: miksoftНу так кладите в любую СУБД. 100 миллионов записей при правильной индексации и методах работы - не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:01 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
miksoftЕсли значений так мало (всего пять), то их можно не хранить вообще, а хранить только пять массивов координат ячеек, которые имеют соответсвующие значения. Это, кстати, можно использовать и при хранении матрицы в СУБД. да, вы правы, почему-то мне самой эта идея в голову не пришла. тогда с обоими индексами и координатой значения я смогу уложиться в 400мб памяти. спасибо огромное, что натолкнули на мысль! хотя к теме форума вроде не очень относится, но все же спасибо за оказанную помощь (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:05 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nomadmindedда, вы правы, почему-то мне самой эта идея в голову не пришла. тогда с обоими индексами и координатой значения я смогу уложиться в 400мб памяти.Если хранить данные построчно, то номер строки хранить можно будет только один раз, что сократит расходы памяти еще в пару раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:09 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nomadmindedхотя к теме форума вроде не очень относитсяОчень даже относится! Посмотрите внутреннюю структуру индексов в разных СУБД - увидите много общего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:15 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
miksoft nomadmindedда, вы правы, почему-то мне самой эта идея в голову не пришла. тогда с обоими индексами и координатой значения я смогу уложиться в 400мб памяти.Если хранить данные построчно, то номер строки хранить можно будет только один раз, что сократит расходы памяти еще в пару раз. Ну-у-у, тогда рекомендую почитать как устроен FAT у ... например Ёкселя. ...красно/черное дерево. " - Привет саксаул! - Я не саксаул, я аксакал! - А-а, всё равно - дерево... " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:47 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nik_xНу-у-у, тогда рекомендую почитать как устроен FAT у ... например Ёкселя. ...красно/черное дерево.Не уловил вашей мысли насчет FAT :( Как устроен FAT (если речь о файловой системе) я знаю, но каким боком он тут - не понимаю. И причем тут "красно/черное дерево"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:51 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
miksoft nik_xНу-у-у, тогда рекомендую почитать как устроен FAT у ... например Ёкселя. ...красно/черное дерево.Не уловил вашей мысли насчет FAT :( Как устроен FAT (если речь о файловой системе) я знаю, но каким боком он тут - не понимаю. И причем тут "красно/черное дерево"? Ну я же дал наводку... (про водку ни слова). Копай в сторону описания FAT от MS Excel. Там именно FAT, и именно дерево (хранения элементов в мозге). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:55 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
http://www.sql.ru/forum/actualthread.aspx?tid=366383 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 13:58 |
|
||
|
способ хранения большой матрицы?
|
|||
|---|---|---|---|
|
#18+
nik_xКопай в сторону описания FAT от MS Excel.У меня FAT ну никак не ассоциируется с MS Excel. На всякий случай поискал слово FAT в хелпе к MS Excel 2003 - пусто. Если вы имеете в виду что-то конкретное - можно ссылочку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:00 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34227640&tid=1543799]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 464ms |

| 0 / 0 |
