AIMP Forum

AIMP для Windows => Ошибки / Замечания => Topic started by: Shpigor on May 28, 2020, 16:19:58

Title: [-] [2217] Запись изменений в local.adb
Post by: Shpigor on May 28, 2020, 16:19:58
Я заметил, что обновление записей в медиатеке происходит полной перезаписью БД. Будь то обновление рейтинга, добавление количества прослушиваний или еще что.

Моя БД (local.adb) занимала около 900кб. Я добавил в медиатеку папку на сканирование с ~10к треков. Когда все файлы добавились в медиатеку, Аимп, оказывается, записал на диск ~37ГБ в файл local.adb.tmp, просто перезаписывая его.

Почему такое странное поведение, а не просто модификация в файле? Выглядит как костыль. Плюс я видел на форуме у человека БД на 50 мег, это ж каждое прослушивание пишет 50МБ на диск, как и добавление файлов в медиатеку.
Title: Re: [2217] Запись изменений в local.adb
Post by: Artem on May 28, 2020, 16:45:09
Вы не пробовали считать, какой объем данных пишет на диск обычный виндовый своп? Вместо SQL-like базы плеер использует memory based dataset. Почему? Да потому, что он работает в 10-ки раз быстрее. Писаться он умеет только так. Я считаю, что скорость прежде всего.

Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Shpigor on May 28, 2020, 18:06:20
А почему SQL медленный будет? Его используют мессенджеры и не только, и не тормозит же.
Разве с таким раскладом не будет сильных тормозов при добавлении файлов с большой базой?

Своп оч мало пишет, если он не отключен конечно. Браузеры любят писать много, и далеко не в кеш.
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Shpigor on May 28, 2020, 18:11:19
Мне интересно, где скорость "подкачивает", если тут немного запросов. Ну и отсюда тормоза на флешке еще.
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Shpigor on May 28, 2020, 19:12:35
Решил потестить.

Да, запись огромных массивов кешируется системой, и поэтому на диск почти ничего не пишется, так что диск не умирает. Но, с другой стороны, треки добавляет со скоростью улитки, так как молотит проц в один поток (у меня райзен 2600).
Это может быть из-за именно такой организации БД?
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Artem on May 29, 2020, 10:27:00
Мне интересно, где скорость "подкачивает", если тут немного запросов. Ну и отсюда тормоза на флешке еще.

Поставьте себе версию 3.60, там в качестве базы использовалась SQLite, и попробуйте в нее загрузить 250 тысяч файлов. Сравните скорость с текущей реализацией.

А еще, особенно сильно, скорость проседала при выборке данных для смарт-плейлистов с большим числом условий (больше 10).
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Artem on May 29, 2020, 10:27:51
База организована по 3NF.
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Shpigor on June 04, 2020, 13:58:53
Попробовал, подвисает нормально так.  :o
А со скоростью добавления файлов в либу в текущей реализации ничего не можно сделать?
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Artem on June 04, 2020, 15:36:12
Попробовал, подвисает нормально так.  :o
А со скоростью добавления файлов в либу в текущей реализации ничего не можно сделать?

Она более-менее приемлемая, имхо.
Title: Re: [-] [2217] Запись изменений в local.adb
Post by: Shpigor on June 05, 2020, 20:07:33
Протестировал на средней либе (47к записей). 3 минуты готовилось к добавлению. За 30 сек добавило ~120 записей. Присутствует деградация скорости с ростом количества. АИМР 4.7

Проблема добавления актуальна для больших либ. Если вдруг будут планы на реорганизацию медиатеки - можно поковырять Jriver.