|
|
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
и, да, я бы выбрал SQLite для мелких однопользовательских задач. если лицензионность индифферентна, то DISQLite для доступа. там, кстати, есть демка с генерацией БД (text+text+int+float+float+float+float+float+float), на моем среднем компе скорость 200к/сек строк генерации рандомных данных и вставки их в новую базу на SSD. но при прямых руках таких скоростей и с Firebird достичь можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 20:58 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Как-то делал массовую вставку примитивных по структуре записей в библиотеке UIB Как ни противно было признаваться - сделать в памяти текстовый скрипт из мнооооожества строк INSERT .... VALUES( ... ) и скормить его Firebird'y оказалось заметно быстрее, чем препарированная кверь в цикле с изменением параметров (ParamByName не использовался, параметры заполнялись по номеру). Такие дела.... Андрей ИгоревичКак раз типизированными файлами сейчас и реализовано Ну и хорошо, зачем их обязательно внутрь SQL засасывать, они от этого только больше в размере станут. Но если очень хочется - почитай про EXTERNAL TABLE - возможно задачу распарсить файл - если тструктура действительно простая и однородная - можно будет переложить на сам Firebird INSERT INTO REAL_TABLE(.....) SELECT * FROM EXTERNAL_TABLE А вообще я бы тебе советовал перейти в форум про Firebird, описать задачу, объёмы данных ,как част ои какмного пишете читаете, и возможно тебе просто скажут, что SQL не для того. PS. насчет транзакций.... Ну вообще-то вызывать транзакции слишком часто ( или наоборот слишком редко, но это в меньшей степени ) - это азбучный способ затормозить сервер. http://www.ibase.ru/dontdoit/ http://www.ibase.ru/45-ways-to-improve-firebird-performance-russian/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:01 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
fd00ch, если новое начинать - то лучше mORMot - можно начать с SQLite ,а если не понравистя (данных слишком много, например, то переключиться в не-SQL плоские файлы Кстати, был ещё NexusDB - табличные файлы со встроенным SQL-языком написанные целиком на Delphi Но насколько это надёжно - мнения были разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:02 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
VDSoft...Патамучта в состоянии искаропки эта окаменелость с FB в режиме Embedded Server работать почему-то не желает ... и один из участников приводил свой вариант возможного патча. VDSoft...поищите.по форуму... Ты придумал, а мне искать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:05 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччД, Покажешь класс подключения/работы непатченного IBX с Embedded FB Server и можешь твёрдо рассчитывать на мои извинения. В противном случае рассчитываю на них уже с вашей стороны.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:11 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
VDSoftчччД, Покажешь класс подключения/работы непатченного IBX с Embedded FB Server и можешь твёрдо рассчитывать на мои извинения. В противном случае рассчитываю на них уже с вашей стороны.. "А слабо Вольдемару в бассейн нырнуть?" - (с). У меня работает. Если у тебя проблемы - спрашивай, не стесняйся. Только конкретные вопросы задавай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:22 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччД, Ну работает и работает, может научите кого, если попросят. У меня тож работает в частном патче IBX. А вопросов, если заметите, я не имел уже с самого начала и не могу понять этого вашего упорного выпрыгивания из штанов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:43 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Что-то всего по написали, половину я не понял (о чем спорили вообще не понял). Вы лучше по поводу оптимизации этого 21170870 кода подскажите :), если в хотя бы 3-10 раз его ускорить, то уже норм будет. Ну там сразу по 5 команд одной строкой выполнять или ещё чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 21:59 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич...если в хотя бы 3-10 раз его ускорить, то уже норм будет. Ну там сразу по 5 команд одной строкой выполнять или ещё чего. Вместо "Insert into" пишешь "Execute block". За одно обращение задаешь кучу значение параметров, для нескольких Insert: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 22:12 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Я странной мыслью поделюсь - а может куски этих больших массивов в blob-ах хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 22:55 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovЯ странной мыслью поделюсь - а может куски этих больших массивов в blob-ах хранить? Тогда и СУБД никакая не нужна - типизированный файл и все. ТС хочет доступ по индексам массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 23:02 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичКак раз типизированными файлами сейчас и реализовано. Но стандартные "File of record" больше двух гигов (NTFS, если что) тоже вылетают с ошибкой... Это наверняка решается одной строкой. Покажи код, сразу ошибка найдется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 01:35 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччДVladimir BaskakovЯ странной мыслью поделюсь - а может куски этих больших массивов в blob-ах хранить? Тогда и СУБД никакая не нужна - типизированный файл и все. ТС хочет доступ по индексам массива. По индексу можно находить большой кусок данных..... а не одно число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 06:02 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичЧто-то всего по написали, половину я не понял (о чем спорили вообще не понял). Вы лучше по поводу оптимизации этого 21170870 кода подскажите :), если в хотя бы 3-10 раз его ускорить, то уже норм будет. Ну там сразу по 5 команд одной строкой выполнять или ещё чего. Попробуйте разделить исходные данные на 2-3 части, и запускать несколько клиентских приложений с разных компов, или на крайний случай с одного, для заполнения одной и той же БД. Если затычка в предварительной подготовке данных в клиентском приложении, и сервер сейчас "простаивает", то при таком подходе может получиться быстрее (скажем загрузить больше ядер/потоков компюьтера). Обрамление транзакций start/commit, должно быть через примерно 10000-20000 инсертов. То есть не на каждый инсерт, но и миллион инсертов за одну транзакцию тоже не рекомендуют. Разрабатывать (и заполнять БД) можно на сервере на своем компе, а если переносить на другой комп для работы, можно пользоваться embedded версией firebird. там не сервер, а просто копирование нескольких файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 12:25 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovЯ странной мыслью поделюсь - а может куски этих больших массивов в blob-ах хранить?не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 12:26 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
VDSoftпредложенный выше вариант обращения сразу по сохранённым указателям все равно д.б. Самым быстрымя вообще не понял как оно у него стало медленнее parambyname возможно внешние тормоза так круто перекрыли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:25 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
vavan, может, он тест запускал параллельно с просмотром видео. Или однократно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:38 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччДАндрей Игоревич...если в хотя бы 3-10 раз его ускорить, то уже норм будет. Ну там сразу по 5 команд одной строкой выполнять или ещё чего. Вместо "Insert into" пишешь "Execute block". За одно обращение задаешь кучу значение параметров, для нескольких Insert: код образец Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Попробовал данный вариант, ничего не получилось :). Вообще код выглядит ужасно, мой чувство прекрасного горько плачет. мой код Код: 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. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. Но "вообще" данный вариант мне чисто эстетически что-то не очень :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:44 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Ты в IBEpert сей EB испытывал? Начни с него, с одного insert, потом добавляй. Может, в ibx глюк. А может, в FB. А может, в твоём коде. Искать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:51 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччДАндрей ИгоревичКак раз типизированными файлами сейчас и реализовано. Но стандартные "File of record" больше двух гигов (NTFS, если что) тоже вылетают с ошибкой... Это наверняка решается одной строкой. Покажи код, сразу ошибка найдется. Может быть, надо только код заново написать, яж его подкастылил :). Сейчас попробую. S.G.Андрей Игоревич... Попробуйте разделить исходные данные на 2-3 части, и запускать несколько клиентских приложений с разных компов, или на крайний случай с одного, для заполнения одной и той же БД. Если затычка в предварительной подготовке данных в клиентском приложении, и сервер сейчас "простаивает", то при таком подходе может получиться быстрее (скажем загрузить больше ядер/потоков компюьтера). Обрамление транзакций start/commit, должно быть через примерно 10000-20000 инсертов. То есть не на каждый инсерт, но и миллион инсертов за одну транзакцию тоже не рекомендуют. Разрабатывать (и заполнять БД) можно на сервере на своем компе, а если переносить на другой комп для работы, можно пользоваться embedded версией firebird. там не сервер, а просто копирование нескольких файлов. Ну в контексте данной задачи, это уже не костыль, это целая инвалидная коляска. А многозадачность в виде нескольких потоков в одном приложении чтоль не работает с БД? Но в распаралеливании есть сложность придумывания алгоритма распаралеливания (тавтология блин), мнеж в итоге не единицами надо всё заполнять, и по факту размеры массивов не известны, указанный в самом начале - максимально возможный вариант. Если в несколько потоков работать с БД можно, то попробую. Обрамление транзакций start/commit - в принципе сработало даже на 20ккк значений при расположении перед и после цикла, но думаю закину счетчик и "обрамление" буду выполнять раз в 10к инсертов, не сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:54 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
vavanVDSoftпредложенный выше вариант обращения сразу по сохранённым указателям все равно д.б. Самым быстрымя вообще не понял как оно у него стало медленнее parambyname возможно внешние тормоза так круто перекрыли Ну яж написал - в порядке погрешности. У меня вон сейчас заполнение, случайно запущенное за 20 сек выполнилось, хотя вчера за 30 было. Может ССДшник тупит, может кешь у ССДшника кончился (у М2 там как-то хитро, есть супербыстрый кеш, есть остальная память помедленней), может процесс какой решил не делится процессорной мощностью. Просто заметного прироста не заметил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:58 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
чччДТы в IBEpert сей EB испытывал? Начни с него, с одного insert, потом добавляй. Может, в ibx глюк. А может, в FB. А может, в твоём коде. Искать надо. В ИБ не пробовал, я не очень понимаю синтаксис [(<inparams>)] этого, точнее этого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В мануале всякие не очень понятные примеры Код: plsql 1. 2. Надо, видимо, глубже закапываться. Количество инсертов влияет только на цифру после "сдвига" (offset). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 14:09 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
не очень понимаю синтаксис [(<inparams>)]> - внешние имена, внутренние имена... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 14:14 |
|
||
|
Как работать с очень большими масивами
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич Код: pascal 1. ой, ё.... я надеюсь, рядом с реалдьными ВВЭРами этой программы не будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 14:38 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39598097&tid=2041256]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 506ms |

| 0 / 0 |
