Notes |
|
|
Ну, вам скорее всего сюда https://synopse.info/forum/viewforum.php?id=2
Мы пользуемся ORM для унификации доступа к разным базам, а как вставлять метки и вычислять id решает уже либа. |
|
|
(0017797)
|
Robbi
|
03-02-2017 15:16
|
|
Я давно не слежу за исходниками программы, потому и не могу сразу определить к кому именно это, разработчикам виднее. Но насколько я понимаю разбор kml происходит именно в Планете. Библиотека не предоставляет batch режим для вставки однотипных объектов? |
|
|
(0017798)
|
Robbi
|
03-02-2017 15:18
|
|
https://synopse.info/forum/viewtopic.php?id=3781
Это не относится, случайно, к теме? |
|
|
(0017800)
|
zed
|
03-02-2017 18:11
|
|
В mORMot есть возможность указать, как конкретно вычислять id для MongoDB, более того, по умолчанию там id всегда запоминался при первом обращении и только по моей просьбе была добавлена опция, чтобы id вычислялся каждый раз.
Дело в том, что фреймворк ориентирован на использование на серверах, в режиме, когда с БД работает только одно приложение эксклюзивно. Есть там и batch режим и он рекомендован к использованию, но опять же, с оглядкой на то, что это дело происходит на сервере, а не как у нас.
Сделал билд, расчитанный на эксклюзивное использование MongoDB: https://yadi.sk/d/AJH45Krl3Chrbf
Всё отличие в одной строке:
VStorage.EngineAddCompute := eacMaxIDEachTime;
которую в этом билде я закомментировал.
Попробуйте, сравните быстродействие. Только не пытайтесь модифицировать метки сразу из двух копий SAS. |
|
|
(0017801)
|
Robbi
|
03-02-2017 18:27
|
|
Так если будет возможность заблокировать таблицу на запись, то совместная работа не пострадает. Главное id вычислять один раз перед любой вставкой набора данных.
За версию спасибо, попробую. |
|
|
(0017802)
|
zed
|
03-02-2017 18:40
|
|
Это надо много писать MongoDB-специфичного кода, либо вообще выносить его в отдельный тип меток и применять там всю оптимизацию, какую только можно.
Дело в том, что когда я писал новые метки, основной упор был на SQLite3, а поддержка MongoDB и СУБД появилась чисто случайно, из-за того, что фреймворк позволял их прикрутить весьма просто. Но вот сделать однотипный код, который бы одинаково эффективно работал со всеми этими БД, довольно трудоёмко и я пока не готов этим заниматься. Если вас этот момент интересует, можете заняться реализацией. |
|
|
(0017803)
|
Robbi
|
03-02-2017 18:47
|
|
Удаление дерева меток также происходит мучительно долго... Получается что сложные операции импорта большого объема данных и удаления лучше производить с помощью небольших программ для этого написанных, а не с помощью Планеты.
Написанная на Java программа выполняет удаление дерева меток (с блокировкой таблицы) за несколько секунд, Планета - около десяти минут удаляла и в конце выдала ошибку "EAssertionFailed: Assertion failure (D...u_MarkDBImplORMHelper.pas, line 1350)".
Импорт происходит теперь адекватно быстро. |
|
|
(0017804)
|
Robbi
|
03-02-2017 18:53
|
|
Так по идее блокировка таблицы на запись должна быть универсальной для всех БД, внутри используемой библиотеки уже различаясь реализацией для SQLite, Mongo, ...
Генерация ID также реализована для всех, надо лишь немного изменить логику работы. Я бы занялся реализацией, но в Delphi я пока могу лишь собрать приложение из исходников ну и что-то совсем простое поправить. |
|
|
(0017805)
|
Robbi
|
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
|
03-02-2017 18:58
|
|
Заведите отдельный тикет. Не надо лепить все проблемы в одну кучу. И убедитесь, что баг относится к ночнушке, а не к тестовой сборке, что я вам дал. |
|
|
(0017807)
|
Robbi
|
03-02-2017 19:13
|
|
В ночнушке также падает. Но не при удалении обнаруживалось, а рандомно, если приложение некоторое время простаивало (около часа)
Тикет создам |
|