SASGIS - SAS.Планета
View Issue Details
0001920SAS.Планета[All Projects] Хотелкаpublic07-05-2013 07:0920-06-2016 15:21
vdemidov 
zed 
normalfeatureN/A
resolvedfixed 
Windows7Ultimate
121010 
160707160707 
0001920: Новый тип кэша на основе SQLite3
Кэш тайлов на основе набора баз SQLite3 по тем же принципам что и кэш на BerkeleyDB.
SQLite, версионный кэш, тайлохранилище
related to 0001919confirmed  SAS.Планета Новый тип кэша на основе SQLite3 (в формате MBtiles) 
related to 0001376closed vasketsov SACS.Планета Новый тип кэша на основе SQLite3 (в формате MBtiles и не в формате MBtiles) 
related to 0003078resolved zed SAS.Планета Кэш SQLite3: функции Delete и SaveTile могут возвращать неопределённый результат 
Issue History
07-05-2013 07:09vdemidovNew Issue
07-05-2013 07:09vdemidovIssue generated from: 0001919
07-05-2013 07:09vdemidovRelationship addedrelated to 0001919
07-05-2013 07:09vdemidovStatusnew => confirmed
09-10-2015 13:24vdemidovTag Attached: тайлохранилище
16-06-2016 06:58zedAssigned To => zed
16-06-2016 06:58zedStatusconfirmed => assigned
16-06-2016 06:59zedTarget Version26xxxx => 160707
16-06-2016 06:59zedSummaryНовый тип кэша на основе SQLite3 (не в формате MBtiles) => Новый тип кэша на основе SQLite3
16-06-2016 06:59zedDescription Updatedbug_revision_view_page.php?rev_id=6958#r6958
16-06-2016 07:00zedTag Attached: SQLite
16-06-2016 07:00zedTag Attached: версионный кэш
16-06-2016 07:01zedRelationship addedrelated to 0001376
16-06-2016 13:04zedNote Added: 0017378
16-06-2016 14:57zedNote Added: 0017379
17-06-2016 05:35TolikNote Added: 0017384
17-06-2016 05:36TolikNote Edited: 0017384bug_revision_view_page.php?bugnote_id=17384#r6960
17-06-2016 05:45TolikNote Added: 0017385
17-06-2016 05:49TolikNote Edited: 0017385bug_revision_view_page.php?bugnote_id=17385#r6962
17-06-2016 05:56TolikNote Added: 0017386
17-06-2016 05:57TolikNote Edited: 0017386bug_revision_view_page.php?bugnote_id=17386#r6964
17-06-2016 06:02TolikNote Edited: 0017386bug_revision_view_page.php?bugnote_id=17386#r6965
17-06-2016 06:03TolikNote Added: 0017387
17-06-2016 06:04TolikNote Edited: 0017386bug_revision_view_page.php?bugnote_id=17386#r6966
17-06-2016 06:06TolikNote Edited: 0017387bug_revision_view_page.php?bugnote_id=17387#r6968
17-06-2016 06:09TolikNote Edited: 0017387bug_revision_view_page.php?bugnote_id=17387#r6969
17-06-2016 06:51zedNote Added: 0017388
17-06-2016 07:41zedNote Added: 0017392
17-06-2016 18:14TolikNote Added: 0017402
17-06-2016 18:32zedNote Added: 0017403
17-06-2016 19:19GarlNote Added: 0017404
17-06-2016 19:45zedNote Added: 0017405
18-06-2016 06:45zedNote Added: 0017406
18-06-2016 10:34GarlNote Added: 0017409
18-06-2016 10:41zedNote Added: 0017410
18-06-2016 21:26zedNote Added: 0017411
20-06-2016 15:20zedStatusassigned => resolved
20-06-2016 15:20zedFixed in Version => 160707
20-06-2016 15:20zedResolutionopen => fixed
20-06-2016 15:21zedNote Edited: 0017378bug_revision_view_page.php?bugnote_id=17378#r6997
20-06-2016 15:21zedRelationship addedrelated to 0003078

Notes
(0017378)
zed   
16-06-2016 13:04   
(edited on: 20-06-2016 15:21)
Портировал реализацию из SACS (детали см. в 0001376). Работает просто замечательно :)

По сравнению с SACS нету:
- поддержки формата MBTiles и всего с ним связанного;
- сжатия тайлов на лету

Всё остальное идентично, так что если в SACS не использовалось сжатие, то кэши будут совместимы.

Тестируйте ночнушку, ищите баги.

(0017379)
zed   
16-06-2016 14:57   
Меня пока что смущает, что в БД используется кодировка UTF-16. Я склоняюсь к тому, чтобы сделать UTF-8.
(0017384)
Tolik   
17-06-2016 05:35   
(edited on: 17-06-2016 05:36)
А расскажите, в чём преимущества/недостатки по сравнению с Беркли?
Он будет устойчивее к сбоям? Например, при зависании/вырубании компа открытый кэш не будет портиться?
Переносить кэш на др. комп легко (просто копированием папки)?
Read only версия кэша есть?

(0017385)
Tolik   
17-06-2016 05:45   
(edited on: 17-06-2016 05:49)
Ну, работает. Радует, что нет непонятной папки env. Почему sqlite viewer не открывает файл кэша? Файл меток открывает.
http://totalcmd.net/plugring/sqliteviewer.html

Чем можно посмотреть, что там внутри? И чем чинить, если покорраптится?

(0017386)
Tolik   
17-06-2016 05:56   
(edited on: 17-06-2016 06:04)
Конверсия кэша Беркли -> sqlite прошла якобы успешно, файлы сгенерились, но ничего не открывается. Создался sqlite.log (кстати, в UTF-16, но без хедера, так что гляделкой открывается как binary), в нём много таких строк:
2016-06-17 08:51:16.445 (replace) no such column: image ( error code: 1)

P.S. Пардон, всё работает, просто указал не то расширение файла (на фиг оно вообще нужно, когда кэш в БД?!) Лог ошибок теперь не создался.

(0017387)
Tolik   
17-06-2016 06:03   
(edited on: 17-06-2016 06:09)
Карта заполнения строится мгновенно (по сравнению с Беркли).

(0017388)
zed   
17-06-2016 06:51   
Работает быстрее, переносить на другой комп проще. Что такое SQLite знает любой школьник, а вот про BerkeleyDB мало кто слышал.

Со сбоями должно быть не хуже (а то и лучше), чем в Беркли.

Файл БД теоретически можно открыть только для чтения, но сейчас это у нас не реализовано. В то же время, через настройки карты всегда можно запретить запись в кэш.

Структура файла простая, посмотреть можно практически любой гляделкой (например, SQLiteStudio). Плагину от тотала не нравится расширение файла.
(0017392)
zed   
17-06-2016 07:41   
А нет, с WAL журналом режим только для чтения не совместим: Write-Ahead Logging and Read-Only mode compatible in SQLite3?
(0017402)
Tolik   
17-06-2016 18:14   
Всё круто, только надо провести крэш-тесты: запустить на скачку и поубивать процессы. И добавить тулзы для поиска и коррекции ошибок.
(0017403)
zed   
17-06-2016 18:32   
Утилиты есть на сайте производителя: http://www.sqlite.org/2016/sqlite-tools-win32-x86-3130000.zip Принцип восстановления описан, например, вот тут: https://habrahabr.ru/post/160629/

Убиванием процесса базу повредить скорее всего не удастся. Тут надо выдёргивать штепсель из розетки.
(0017404)
Garl   
17-06-2016 19:19   
а то что при пустой версии становится доступна версия "0" - это здесь писать или другой тикет делать?
(0017405)
zed   
17-06-2016 19:45   
Так задумано.
(0017406)
zed   
18-06-2016 06:45   
А хотя, надо пофиксить. Только тогда нельзя будет руками задать версию 0. Это будет зарезервированная версия для обозначения "нет версии".
(0017409)
Garl   
18-06-2016 10:34   
а "" вместо нуля можно? или банально не отображать версию "0" в списке версий при таком типе кэша...

з.ы.
я пока ни разу не попадал на версию "0"
(0017410)
zed   
18-06-2016 10:41   
Если пользователь не указал версию, т.е. версия - пустая строка, то в БД записывается 0 (как число), поскольку в БД поле версии обязательно и по нему индекс строится.

А вот то, что при чтении версии из БД, этот 0 не преобразуется обратно в пустую строку, а воспринимается как настоящая версия, надо исправить.
(0017411)
zed   
18-06-2016 21:26   
Исправил кодировку и отображение нулевой версии.