View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0003173 | SAS.Планета | Рефакторинг / Refactoring | 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 | ||
| Product Version | 160707 | ||||
| Target Version | 50xxxx.VIP | ||||
| Summary | 0003173: База меток в MongoDB: Медленный импорт файлов | ||||
| Description | Исходные данные: 1) БД Монго в которой >300k Меток рассортированных по категориям 2) Kml файл объемом около 100Мб содержащий >100к меток с описаниями При импорте консоль монго отображает медленные запросы. Как я понимаю, при вставке каждой метки происходит вычисление id с помощью аггрегирующего запроса и затрачивается 180-190мс на каждый запрос. Если я прав, то предлагаю сделать следующее: 1) при импорте блокировать таблицу на запись 2) вычислять максимальный существующий id 3) вставлять все метки последовательно увеличивая id не выполняя запросов к бд для вычисления следующего id 4) разблокировать таблицу | ||||
| Tags | mongo, импорт, метки | ||||
|
|
Ну, вам скорее всего сюда https://synopse.info/forum/viewforum.php?id=2 Мы пользуемся ORM для унификации доступа к разным базам, а как вставлять метки и вычислять id решает уже либа. |
|
|
Я давно не слежу за исходниками программы, потому и не могу сразу определить к кому именно это, разработчикам виднее. Но насколько я понимаю разбор kml происходит именно в Планете. Библиотека не предоставляет batch режим для вставки однотипных объектов? |
|
|
https://synopse.info/forum/viewtopic.php?id=3781 Это не относится, случайно, к теме? |
|
|
В mORMot есть возможность указать, как конкретно вычислять id для MongoDB, более того, по умолчанию там id всегда запоминался при первом обращении и только по моей просьбе была добавлена опция, чтобы id вычислялся каждый раз. Дело в том, что фреймворк ориентирован на использование на серверах, в режиме, когда с БД работает только одно приложение эксклюзивно. Есть там и batch режим и он рекомендован к использованию, но опять же, с оглядкой на то, что это дело происходит на сервере, а не как у нас. Сделал билд, расчитанный на эксклюзивное использование MongoDB: https://yadi.sk/d/AJH45Krl3Chrbf Всё отличие в одной строке:
которую в этом билде я закомментировал.Попробуйте, сравните быстродействие. Только не пытайтесь модифицировать метки сразу из двух копий SAS. |
|
|
Так если будет возможность заблокировать таблицу на запись, то совместная работа не пострадает. Главное id вычислять один раз перед любой вставкой набора данных. За версию спасибо, попробую. |
|
|
Это надо много писать MongoDB-специфичного кода, либо вообще выносить его в отдельный тип меток и применять там всю оптимизацию, какую только можно. Дело в том, что когда я писал новые метки, основной упор был на SQLite3, а поддержка MongoDB и СУБД появилась чисто случайно, из-за того, что фреймворк позволял их прикрутить весьма просто. Но вот сделать однотипный код, который бы одинаково эффективно работал со всеми этими БД, довольно трудоёмко и я пока не готов этим заниматься. Если вас этот момент интересует, можете заняться реализацией. |
|
|
Удаление дерева меток также происходит мучительно долго... Получается что сложные операции импорта большого объема данных и удаления лучше производить с помощью небольших программ для этого написанных, а не с помощью Планеты. Написанная на Java программа выполняет удаление дерева меток (с блокировкой таблицы) за несколько секунд, Планета - около десяти минут удаляла и в конце выдала ошибку "EAssertionFailed: Assertion failure (D...u_MarkDBImplORMHelper.pas, line 1350)". Импорт происходит теперь адекватно быстро. |
|
|
Так по идее блокировка таблицы на запись должна быть универсальной для всех БД, внутри используемой библиотеки уже различаясь реализацией для SQLite, Mongo, ... Генерация ID также реализована для всех, надо лишь немного изменить логику работы. Я бы занялся реализацией, но в Delphi я пока могу лишь собрать приложение из исходников ну и что-то совсем простое поправить. |
|
|
Второй вариант сообщений о падении при удалении: 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) Три штуки последовательно. После окончания удаления. |
|
|
Заведите отдельный тикет. Не надо лепить все проблемы в одну кучу. И убедитесь, что баг относится к ночнушке, а не к тестовой сборке, что я вам дал. |
|
|
В ночнушке также падает. Но не при удалении обнаруживалось, а рандомно, если приложение некоторое время простаивало (около часа) Тикет создам |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 03-02-2017 13:18 | Robbi | New Issue | |
| 03-02-2017 13:19 | Robbi | Description Updated | |
| 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 | => 50xxxx.VIP |
| 08-08-2025 13:25 | zed | Category | Рефакторинг => Рефакторинг / Refactoring |