svp писал(а):При отрисовке текущего масштаба (а это около 20 тайлов, видимых на экране) хватает даже быстродействия файловой системы, а беркли будет гораздо быстрее.
Согласен что беркли быстрее файловой системы. (Имхо, ведь в файловой системе используется хэш таблица при поиске, а в беркли бинарные деревья).
svp писал(а):И рисуете вы попиксельно. Это в любом случае медленно.Можно поступать по-другому.
Соласен что попиксельное рисование медленее рисование квадратов, но скорость рисования в оперативке очень высока, а всего то надо записать в буфер 6Мб (для моего монитора), главное не смешивать запись и отрисовку, лучше собрать инфу сделать буфер и наложить его за раз.
svp писал(а):Давайте представим, что с каждым тайлом у нас могут хранится дополнительные по два бита на каждый ниже лежащий уровень. i-той парой бит мы будем кодировать следующие состояния: 11 -- все дочерние тайлы i-го уровня (относительно текущего) закачаны; 00 -- ни один тайл i-го уровня не закачан; 01 -- некоторые дочерние тайлы закачаны.Мы получили пирамидальную структуру, имея которую мы можем не тратить время на проверку наличия каждого тайла i-го уровня в области видимости. Достаточно отрисовать белым квадраты с 11, чёрным с 00 и перейти на более глубокий уровень в случае 01.
Согласен что это решение более эффективно, но оно более трудно в реализации.
svp писал(а):А в вашем индивидуальном хранилище предусмотрены какие-то механизмы восстановления данных при сбоях? В беркли предусмотрены. Используя же ваш "быстрый" формат пользователи рискуют потерять всё из-за сбоя во время записи в индексную структуру внутри вашей базы.
В самом формате этих механизном несколько (в xpk, в apk их почти небыло), но нет реализации самой функции восстановления, это трудоёмкая задача - времени пока нет. Теоритически из повреждённого файла (любой стрепени повреждения) можно извлечь все оставшиеся целыми тайлы. Более того такой вариант как сделан в текущей структуре кэша можно перенести и на однофайловый кэш. Скажу сразу - сейчас если повредить файл кэша вылетит очень неприятное исключение, которое приведёт к заморозке программы (само исключение запишется в лог).
svp писал(а):Но зачем же запихивать его (это дерево) в файл с кешем?
Речь шла об усовершенствованной структуре, которая не просто знает что тайл есть или нет, а указывает положение тайла. Положив её в кэш мы сможет сократить затраты на указатель.
svp писал(а):Такие деревья можно объединять, пересекать, вычитать и в качестве маски использовать для копирования и обмена кешем.
Это относится к "2битовым" деревьям.
svp писал(а):Вы прочитали, кстати, статью?
Ещё нет, но читал другие.
zed писал(а):На чём написан MaPro и можно ли использовать ваш алгоритм в сторонних прогах через исходники или dll? На Беркли свет клином не сошёлся, и если вы говорите, что знаете как сделать быстрее/лучше, то можно попробывать и этот вариант...
Написан на дельфи. И поясняйте, пожалуйста, какой именно алгоритм (Индексирования наличия или однофайлового кэша). В любом случае надо ещё реализовать. Я подумаю над dll, но времени пока нет. (Я не знаю как правильно работать с исключениями в dll, если осведомлены поясните, а лучше хорошую статейку).
zed писал(а):А если сделать кэш не в одном, а в нескольких больших файлах определённого размера. Например, весь кэш пишется в один файл, как только размер этого файла достигает определённого заданного лимита (ну, например в 4.3 Гб - для удобного резервирования на DVD) - создавать второй файл и опять его по-тихоньку "наращивать". Так бы было удобнее и скоростью доступа к последним байтам особых проблем не было б.
Острых нет, но проблемы есть. Как резать индекс? Оставить его в первом файле неправильно. Сделать индексы в каждом файле - повысятся накладные расходы в несколько раз (придётся уже не один раз за 5 шагов определять где тайл, а n-раз по 5 шагов). Вынести в отдельный файл - повысятся накладные расходы (в этом случае на указатель на тайл) и чревато ошибками.
zed писал(а):А смысл? Ну потеряем мы 1 тайл который писали и произошёл сбой - но это ведь мелочь, и нет необходимости в какой-то защите.
Согласен, потеря одного тайла не критично, но в однофайловом хранилище будет сложнее поддерживать целостность, нужны будут специальные меры.