Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


Alesk

Вопрос

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

Ссылка на комментарий

Рекомендуемые сообщения

  • 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). При этом при запуске приложение ничего не делает с этими файлами. Посоветовали мне использовать базу данных, однако какую лучше использовать для хранения большого количества аудиозаписей локально?

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

Ссылка на комментарий
  • 0

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

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

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

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

Изменено пользователем AlexG
Ссылка на комментарий
  • 0
  • Модераторы

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

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

 

Ссылка на комментарий
  • 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, она создает все промежуточные папки, если их не находит

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...