• 0
Alesk

Какую БД лучше использовать для хранения большога кол-ва аудиозаписей?

Вопрос

В приложении имеется 230 аудиофайлов(это число будет увеличиваться), которые были добавлены в проект через deployment, такой способ не идеален, т.к. приложение запускается очень долго ~ 6 сек, даже на мощных телефонах(Android). При этом при запуске приложение ничего не делает с этими файлами. Посоветовали мне использовать базу данных, однако какую лучше использовать для хранения большого количества аудиозаписей локально?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

8 ответов на этот вопрос

  • 0
9 минут назад, Alesk сказал:

такой способ не идеален

Хранить в реляционной БД медиафайлы тоже ни разу не идеально, скорее жуткий моветон.

Если качать с сервера файлы не алё, то вот здесь обсуждался вариант с менеджером ресурсов http://fire-monkey.ru/topic/31-vklyuchenie-svoih-faylov-v-prilozhenie/?do=findComment&comment=83

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, Alesk сказал:

В приложении имеется 230 аудиофайлов(это число будет увеличиваться), которые были добавлены в проект через deployment, такой способ не идеален, т.к. приложение запускается очень долго ~ 6 сек, даже на мощных телефонах(Android). При этом при запуске приложение ничего не делает с этими файлами. Посоветовали мне использовать базу данных, однако какую лучше использовать для хранения большого количества аудиозаписей локально?

Извините за возможный глупый вопрос, а каким образом влияют на загрузку приложения звуковые файлы, которые при загрузке,как вы пишите, даже не используются??? Ну при диплойменте, да, дельфи их долго копирует, но при повторном (первичном без диплоймента) приложение должно запускаться быстро. Ведь это просто файты, которые лежат в соседней директории и все! Попровьте, если я не правильно что то понял. 

Kitty, Brovin Yaroslav и Andrey Efimov понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Возможно я не прав, но мой личный опыт показывает, что кол-во "задеплоенных" файлов никак не влияет на скорость запуска приложения.

А вот что очень сильно влияет - кол-во визуальных компонентов на форме(ах). И чем их больше - тем, соответственно, дольше запускается приложение. И это независимо от того - видимы они на главной форме или нет.

Ну и, конечно, инициализация различных переменных, невизуальных компонентов, инициализации БД и прочего, - это тоже существенно влияет.

P.S. Ну и сори - что не в тему (какую именно БД использовать)...

Изменено пользователем AlexG
Vitaldj, Andrey Efimov и Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

База: SQLite, либо файлы xml - тут от задачи зависит.

Файлы: Деплой (если их немного), файл (.RC или .RES) - удобнее, если файлов много (для авто - генерации, писал утилитку Приложение для создания файла ресурсов (RC, RES)). Либо стягивание с сервера в инете, при необходимости.

 

AlexG, Kitty и Евгений Корепов понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

база важна постольку поскольку. Имхно хранить ссылки в базе а файлы снаружи. Сильно ускоряет резервное копирование и восстановление базы при сбоях. Единственное по уму организовать систему подпапок дабы не миллион файлов в одной папке, например название папки это последние 3 цифры размера файла итп (почему последние - потому что количественное распределение будет более равномерным при большом количестве файлов). Это же позволит грамотно разбить хранилище по нескольким файловым серверам. Если предполагается количество файлов очень большое то возьми больше цифр. Это как бы решение в лов. А так читай про большие хранилища итп.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Mikhail Tchervonenko сказал:

Единственное по уму организовать систему подпапок дабы не миллион файлов в одной папке, например название папки это последние 3 цифры

Файлам при загрузке присваивать идентификатор, лучше первичный ключ, можно просто уникальный.

Далее получить путь:

String SUFileName( unsigned int id )
{
unsigned int d1, d2;
d1 = id / 0x3fffff;
d2 = ( id - ( 0x3fffff * d1 ) ) / 0xfff;
return "su_files\\" + (String)d1 + "\\" + (String)d2 + "\\" + (String)id + ".file";
}

не забывать создавать подпапки:

void CreateWarehouse( String path, unsigned int id )
{
CreateDirectory( ( path + "\\su_files" ).c_str(), NULL );
unsigned int d1, d2;
d1 = id / 0x3fffff;
d2 = ( id - ( 0x3fffff * d1 ) ) / 0xfff;
CreateDirectory( ( path + "\\su_files\\" + (String)d1 ).c_str(), NULL );
CreateDirectory( ( path + "\\su_files\\" + (String)d1 + "\\" + (String)d2 ).c_str(), NULL );
}

Глубину вложения можно изменить в зависимости от ситуации.

Изменено пользователем Камышев Александр

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Камышев Александр сказал:

не забывать создавать подпапки

Глубину вложения можно изменить в зависимости от ситуации

Лучше использовать ForceDirectory, она создает все промежуточные папки, если их не находит

wamaco и Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу