|
|
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕсть у нас тут один специалист. Большой знаток оптимизаций в БД и вообще СУБД :) И ваши чувства, кажется, взаимны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:58 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Нет у меня никаких чувств. Просто есть забавный персонаж, который только на словах Лев Толстой :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 15:14 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
defecatorGerasimenkoАндрей Игоревич, MSSQL с такими файлами справляется на раз, в считанные секунды. Хранимка обеспечит всю обработку. https://msdn.microsoft.com/ru-ru/library/ms188365(v=sql.120).aspx Oracle тоже ! Я как бы ораклист, хотя и непродвинутый, и у меня вопрос - а оно в бесплатный оракул влезае? А то платный, он небесплатный. (Каламбур). и какое нужно железо..... ну не ложится у меня в душе схема данных, хоть в каше с мампсом (храни нас эволюция) посылай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2017, 10:11 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Потихоньку разбираться в ваших предложениях, читать про СУБД, как я понял в теме мне суммарно предложили 3 варианта обработки данных: 1. БД (Оракл, Парадокс, всякие SQL и ещё что-то там). 2. Кешировать массив на диске. 3. Куча способов прямого многопоточного считывания данных посредством всяких библиотек и прямой работы с ними. Про БД, вроде любопытно, хотя и ощущается как костыль, но пока только вникаю. Хотя освоение SQL явно пока отложу. Посоветуйте СУБД максимально простую в освоении для начала. И вопрос, как реализовать? Как одну огромную таблицу типа Код: pascal 1. 2. 3. 4. Где ключ первые 5 столбцов или иерархически: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Где всё - отдельные таблицы (чет много будет таблиц), второй столбец каждой таблицы - ключ, первый - индекс от ключа предыдущего уровня (как он там называется) . Но вообще, как-то сложно :), сначала файлы как-то надо перегнать всё БД, потом на ходу считывать и с этим работать, потом удалять (а ведь мне подобные данные массивы по 3 раза в месяц иногда приходят). Про кеширование, я так понимаю это возможно только на Делфи 64, ибо мой компилятор просто не компилирует подобную запись с формулировкой "массив больше 2 гб". Вопрос - где взять Делфи 64? В итоге я склоняюсь к многопоточной прямой работе с файлами, то есть сначала перегоняю их в типизированные файлы, а потом подгружаю их по мере формирование запросов? По крайне мере просто реализуется и понятно логичкски. Варианты "поднять\использовать сервер" - не рассматриваю, не то что бы у меня не было такой возможности, но это как-то слишком для такой задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 19:41 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичПро кеширование, я так понимаю это возможно только на Делфи 64 Не обязательно. В windows есть механизм отображения файлов в память (file mapping). Буферизацией в этом случае занимается операционная система. Если у вас win64 и более 4G оперативной памяти, то в этом случае есть смысл подумать о 64-битном компиляторе. Вместо Delphi можно посмотреть в сторону Lazarus . пример использования File Mapping для x86 (32 бита) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 22:33 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичПотихоньку разбираться в ваших предложениях, читать про СУБД, как я понял в теме мне суммарно предложили 3 варианта обработки данных: 1. БД (Оракл, Парадокс, всякие SQL и ещё что-то там). 2. Кешировать массив на диске. 3. Куча способов прямого многопоточного считывания данных посредством всяких библиотек и прямой работы с ними. Про БД, вроде любопытно, хотя и ощущается как костыль, но пока только вникаю. Хотя освоение SQL явно пока отложу. Посоветуйте СУБД максимально простую в освоении для начала. И вопрос, как реализовать? Как одну огромную таблицу типа Код: pascal 1. 2. 3. 4. Под описанную задачу так и просится Cache' - там вся база как огромный многомерный массив. http://docs.intersystems.com/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_intro ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 09:45 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovЯ как бы ораклист, хотя и непродвинутый, и у меня вопрос - а оно в бесплатный оракул влезае?последние годы в оракле есть опция in-memory с колоночным хранением что позитивно сказывается на скорострельности аналитических запросов но есть ли оно во фришной редакции тоже не скажу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:05 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичПотихоньку разбираться в ваших предложениях, читать про СУБД, как я понял в теме мне суммарно предложили 3 варианта обработки данных: 1. БД (Оракл, Парадокс, всякие SQL и ещё что-то там). 2. Кешировать массив на диске. 3. Куча способов прямого многопоточного считывания данных посредством всяких библиотек и прямой работы с ними. Про БД, вроде любопытно, хотя и ощущается как костыль, но пока только вникаю. Хотя освоение SQL явно пока отложу. Посоветуйте СУБД максимально простую в освоении для начала. И вопрос, как реализовать? Как одну огромную таблицу типа Код: pascal 1. 2. 3. 4. Где ключ первые 5 столбцов или иерархически: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Где всё - отдельные таблицы (чет много будет таблиц), второй столбец каждой таблицы - ключ, первый - индекс от ключа предыдущего уровня (как он там называется) . Но вообще, как-то сложно :), сначала файлы как-то надо перегнать всё БД, потом на ходу считывать и с этим работать, потом удалять (а ведь мне подобные данные массивы по 3 раза в месяц иногда приходят). Про кеширование, я так понимаю это возможно только на Делфи 64, ибо мой компилятор просто не компилирует подобную запись с формулировкой "массив больше 2 гб". Вопрос - где взять Делфи 64? В итоге я склоняюсь к многопоточной прямой работе с файлами, то есть сначала перегоняю их в типизированные файлы, а потом подгружаю их по мере формирование запросов? По крайне мере просто реализуется и понятно логичкски. Варианты "поднять\использовать сервер" - не рассматриваю, не то что бы у меня не было такой возможности, но это как-то слишком для такой задачи. Я бы делал один большой ключ. - все параметры - показатель. то есть, в одну таблицу. Не надо особенно сильно боятся установки сервера, ну сервер и сервер. Некоторые ставятся в режиме да-да-да-да. В оракле таблицы можно партиционировать, то есть делить данные допустим по периодам, если запрос позволяет сразу определить нужную партицию (партиции) - данные конечно возвращаются быстрее. В других базах тоже, можно - про файербёрд не знаю, а в постгрессе вроде было. но, опять таки, хорошо бы понимать, что у Вас с дисками и оперативкой - БД - это не волшебная палочка. жаль, что более опытные базовики не отреагировали на вопрос о проектировании. Возможно, стоит продублировать вопрос в разделах баз, конкретно - firebird, ms sql server. postgress, mySql. Оракл все же ставить посложнее, лучше не надо, а эти четыре - нормально. Базы без сервера, типа акцесса, к такой работе не приспособлены. но если хотите попробовать, то попробуйте http://www.webdelphi.ru/2016/08/sqlite-v-delphi-bolshoj-obzor-i-litedac-v-primerax/ - предполагаю, что разочарует. разве что, если загонять разные срезы в несколько файлов данных..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 12:02 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
ой, посмотрел, не надо SQLite - •не рекомендован для баз большого размера (эксперты не рекомендуют более 200 Мб); • есть только два типа данных – целое автоинкримент и строка (всё остальное – эмулируется через строки); • не предназначен для многопользовательского использования (хотя это и возможно). а попробуйте для начала как DarkMaster говорил - Firebird, одна таблица, просто вставить нужное количество записей - какого размера станет файл БД, на глаз, ну и пару запросов - хоть тупо сумму по всем полям - сколько протормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 12:08 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
я рекомендую MS SQL, он прост в установке и комплектом идет Management Studio. Ну и инструменты массовой загрузки. Postgree также несложно ставится, но на windows только в целях тестирования/разработки, и по умолчанию его настройки совсем неоптимальны, все будет ужасно медленно работать Oracle сложнее ставить, да и ИМХО не для новичков. Про Firebird ничего сказать не могу - не работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 12:56 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
FB ставится минуты за 2 минуты. Если IBEXprert'ом делать базу - то простую таблицу сделать - несколько минут. Им же можно залить данные в базу. Им же погонять запросы. В целом - то Делфи нужна больше для отображения результатов. Так то всё можно и в эксперте погонять, для оценки производительности, думаю, вполне его достаточно безо всякого кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 14:11 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
- Коллега крутил постгресс под виндой, и вроде проблем не было. Сам не пробовал, врать не буду, но так мне хвалили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 14:42 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
ИМХО, прав был тот, кто советовал работать с двоичными файлами. Создайте из ваших сырых данных несколько двоичных файлов, разбитых по смыслу и, возможно, по времени так, чтобы их можно было полностью загрузить в память. Загрузили, обсчитали один файл, сохранили результат, загрузили, обсчитали следующий. СУБД может дать очень большие накладные расходы, если данные надо не искать, а обрабатывать последовательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 15:32 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Я бы свел к двоичному файлу со структурой как у таблицы. Измерение1, Измерение2, Измерение3, Измерение4, Измерение5, Значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 15:50 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийЯ бы свел к двоичному файлу со структурой как у таблицы. Измерение1, Измерение2, Измерение3, Измерение4, Измерение5, ЗначениеТолько Значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 16:30 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
bk0010ИМХО, прав был тот, кто советовал работать с двоичными файлами. Создайте из ваших сырых данных несколько двоичных файлов, разбитых по смыслу и, возможно, по времени так, чтобы их можно было полностью загрузить в память. Загрузили, обсчитали один файл, сохранили результат, загрузили, обсчитали следующий. СУБД может дать очень большие накладные расходы, если данные надо не искать, а обрабатывать последовательно. так тут вопрос железа. Потянет или нет накладные расходы, за которые можно будет получать удобство и гибкость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 11:22 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
bk0010Только Значение. Согласен. Делаем пустой файл размером 20*60*60*163*312*sizeof(real) По мере чтения заполняем значения сразу на нужное место. В итоге файл получится индексированным. Навигация по нему станет тривиальной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 13:31 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгений, Да, подумаешь, всего 21 гиг... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 14:48 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Cobalt747, А разве это проблема? Не грузить же его единоразово в память? В виде БД все равно будет больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 15:32 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Cobalt747Шавлюк Евгений, Да, подумаешь, всего 21 гиг... угу. Но - база с ее накладными расходами это все минимум удвоит-утроит. И, на этом фоне вопрос о том, какая из бесплатных это хорошо потянет и на каком железе, очевидным не выглядит. так же неочевидно, что например фортран автоматом поможет сделать все просто и прозрачно. над организацией данных все равно надо поразмышлять.... может быть, хранить предрассчитанные агрегаты.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 15:33 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakovбаза с ее накладными расходами это все минимум удвоит-утроит. Вот вот. Базу имеет смысл использовать только если задача по анализу стоит достаточно сложная. Причем сложность заключается в требуемой множественности подходов к выборке данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 15:36 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
rgreat, Да и из такого файла в базу перелить несложно, вот из исходных текстовых - сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 16:30 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
еще я бы подумал над группировкой (агрегацией) данных до такой степени, чтобы агрегированный массив влезал в 2Гб (или, для случая использования 64-битного компилятора, во всю имеющуюся оперативку) - возможно, это ускорило бы решение некоторых задач. если нужны разные виды агрегирования (сумма, мин, макс, среднее и т.п.) - то несколько таких массивов хранить, естественно, в бинарных файлах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2017, 10:52 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
proposalесли нужны разные виды агрегирования (сумма, мин, макс, среднее и т.п.) - то несколько таких массивовили, для задач, где нужно более 1 агрегата - несколько агрегатов в 1 влезающем в память массиве ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2017, 10:55 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Подниму старую свою тему на эту же тему, но не совсем. Решил я не в один массив всё закинуть, а в разные (уже для других целей) и вышла такая ошибка, очевидно, что те же превышения 2гб, если массивы чуть порезать - всё норм как победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 15:53 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39549721&tid=2041256]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 473ms |

| 0 / 0 |
