Anonymous | Login | Signup for a new account | 22-11-24 03:11 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||||||
0003173 | SAS.Планета | Рефакторинг | public | 03-02-2017 13:18 | 27-03-2019 07:37 | ||||||||
Reporter | Robbi | ||||||||||||
Assigned To | |||||||||||||
Priority | low | Severity | tweak | Reproducibility | always | ||||||||
Status | confirmed | Resolution | open | ||||||||||
Platform | OS | OS Version | |||||||||||
Product Version | 160707 | ||||||||||||
Target Version | 30xxxx.Vip | Fixed in Version | |||||||||||
Summary | 0003173: База меток в MongoDB: Медленный импорт файлов | ||||||||||||
Description | Исходные данные: 1) БД Монго в которой >300k Меток рассортированных по категориям 2) Kml файл объемом около 100Мб содержащий >100к меток с описаниями При импорте консоль монго отображает медленные запросы. Как я понимаю, при вставке каждой метки происходит вычисление id с помощью аггрегирующего запроса и затрачивается 180-190мс на каждый запрос. Если я прав, то предлагаю сделать следующее: 1) при импорте блокировать таблицу на запись 2) вычислять максимальный существующий id 3) вставлять все метки последовательно увеличивая id не выполняя запросов к бд для вычисления следующего id 4) разблокировать таблицу | ||||||||||||
Tags | mongo, импорт, метки | ||||||||||||
Attached Files | |||||||||||||
Notes | |
(0017796) vdemidov (manager) 03-02-2017 13:32 |
Ну, вам скорее всего сюда https://synopse.info/forum/viewforum.php?id=2 Мы пользуемся ORM для унификации доступа к разным базам, а как вставлять метки и вычислять id решает уже либа. |
(0017797) Robbi (developer) 03-02-2017 15:16 |
Я давно не слежу за исходниками программы, потому и не могу сразу определить к кому именно это, разработчикам виднее. Но насколько я понимаю разбор kml происходит именно в Планете. Библиотека не предоставляет batch режим для вставки однотипных объектов? |
(0017798) Robbi (developer) 03-02-2017 15:18 |
https://synopse.info/forum/viewtopic.php?id=3781 Это не относится, случайно, к теме? |
(0017800) zed (manager) 03-02-2017 18:11 |
В mORMot есть возможность указать, как конкретно вычислять id для MongoDB, более того, по умолчанию там id всегда запоминался при первом обращении и только по моей просьбе была добавлена опция, чтобы id вычислялся каждый раз. Дело в том, что фреймворк ориентирован на использование на серверах, в режиме, когда с БД работает только одно приложение эксклюзивно. Есть там и batch режим и он рекомендован к использованию, но опять же, с оглядкой на то, что это дело происходит на сервере, а не как у нас. Сделал билд, расчитанный на эксклюзивное использование MongoDB: https://yadi.sk/d/AJH45Krl3Chrbf Всё отличие в одной строке:
которую в этом билде я закомментировал. Попробуйте, сравните быстродействие. Только не пытайтесь модифицировать метки сразу из двух копий SAS. |
(0017801) Robbi (developer) 03-02-2017 18:27 |
Так если будет возможность заблокировать таблицу на запись, то совместная работа не пострадает. Главное id вычислять один раз перед любой вставкой набора данных. За версию спасибо, попробую. |
(0017802) zed (manager) 03-02-2017 18:40 |
Это надо много писать MongoDB-специфичного кода, либо вообще выносить его в отдельный тип меток и применять там всю оптимизацию, какую только можно. Дело в том, что когда я писал новые метки, основной упор был на SQLite3, а поддержка MongoDB и СУБД появилась чисто случайно, из-за того, что фреймворк позволял их прикрутить весьма просто. Но вот сделать однотипный код, который бы одинаково эффективно работал со всеми этими БД, довольно трудоёмко и я пока не готов этим заниматься. Если вас этот момент интересует, можете заняться реализацией. |
(0017803) Robbi (developer) 03-02-2017 18:47 |
Удаление дерева меток также происходит мучительно долго... Получается что сложные операции импорта большого объема данных и удаления лучше производить с помощью небольших программ для этого написанных, а не с помощью Планеты. Написанная на Java программа выполняет удаление дерева меток (с блокировкой таблицы) за несколько секунд, Планета - около десяти минут удаляла и в конце выдала ошибку "EAssertionFailed: Assertion failure (D...u_MarkDBImplORMHelper.pas, line 1350)". Импорт происходит теперь адекватно быстро. |
(0017804) Robbi (developer) 03-02-2017 18:53 |
Так по идее блокировка таблицы на запись должна быть универсальной для всех БД, внутри используемой библиотеки уже различаясь реализацией для SQLite, Mongo, ... Генерация ID также реализована для всех, надо лишь немного изменить логику работы. Я бы занялся реализацией, но в Delphi я пока могу лишь собрать приложение из исходников ну и что-то совсем простое поправить. |
(0017805) Robbi (developer) 03-02-2017 18:56 |
Второй вариант сообщений о падении при удалении: EAccessViolation: Access violation at address 00B572D7 in module 'SASPlanet.3173.exe'. Read of address 7FB8D524 EAssertionFailed: Assertion failure (D...u_MarkDBImplORMHelper.pas, line 1350) EAssertionFailed: Assertion failure (D...u_MarkDBImplORMHelper.pas, line 1350) Три штуки последовательно. После окончания удаления. |
(0017806) zed (manager) 03-02-2017 18:58 |
Заведите отдельный тикет. Не надо лепить все проблемы в одну кучу. И убедитесь, что баг относится к ночнушке, а не к тестовой сборке, что я вам дал. |
(0017807) Robbi (developer) 03-02-2017 19:13 |
В ночнушке также падает. Но не при удалении обнаруживалось, а рандомно, если приложение некоторое время простаивало (около часа) Тикет создам |
Users who viewed this issue | |
User List | Anonymous (2758x), SilentJim (1x), vdemidov (16x), ygorigor (2x), VMatveev (2x), zed (11x), alexandr-dolgov (1x), Robbi (19x), Garl (1x) |
Total Views | 2811 |
Last View | 22-11-2024 03:11 |
Issue History | |||
Date Modified | Username | Field | Change |
03-02-2017 13:18 | Robbi | New Issue | |
03-02-2017 13:19 | Robbi | Description Updated | View Revisions |
03-02-2017 13:32 | vdemidov | Note Added: 0017796 | |
03-02-2017 15:16 | Robbi | Note Added: 0017797 | |
03-02-2017 15:18 | Robbi | Note Added: 0017798 | |
03-02-2017 18:11 | zed | Note Added: 0017800 | |
03-02-2017 18:27 | Robbi | Note Added: 0017801 | |
03-02-2017 18:40 | zed | Note Added: 0017802 | |
03-02-2017 18:47 | Robbi | Note Added: 0017803 | |
03-02-2017 18:53 | Robbi | Note Added: 0017804 | |
03-02-2017 18:56 | Robbi | Note Added: 0017805 | |
03-02-2017 18:58 | zed | Note Added: 0017806 | |
03-02-2017 19:13 | Robbi | Note Added: 0017807 | |
24-04-2017 15:24 | vdemidov | Tag Attached: mongo | |
24-04-2017 15:24 | vdemidov | Tag Attached: импорт | |
24-04-2017 15:24 | vdemidov | Tag Attached: метки | |
24-04-2017 15:33 | vdemidov | Summary | Медленный импорт файлов => База меток в Mongo. Медленный импорт файлов |
26-04-2017 08:26 | zed | Product Version | .Nightly => 160707 |
26-04-2017 08:26 | zed | Summary | База меток в Mongo. Медленный импорт файлов => База меток в MongoDB: Медленный импорт файлов |
27-03-2019 07:37 | vdemidov | Priority | normal => low |
27-03-2019 07:37 | vdemidov | Status | new => confirmed |
27-03-2019 07:37 | vdemidov | Target Version | => 30xxxx.Vip |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |