1

Тема: Файлова система як БД. Відображення та маніпуляція файлами.

Вітаннячка.
Я, чисто для себе, хочу розробити бота для голосового чату, котрий ми записував все те, що кажуть користувачі. Сам процес запису вже є, але мені потрібно покращити файлову структуру для зберігання аудіо файлів.

Поточний функціонал:

Наразі всі файлики (mp3) зберігаються просто в директорії, і вони мають ім'я в форматі

[Назва голосового каналу] [ім'я учасника] [id учасника] [дата] [час]

(час в форматі [година]-[хвилина]-[секунда] )
Кожен такий файлик створюється, навіть якщо користувач натиснув кнопку, сказав - "привіт!", та відпустив кнопку - це вже 1 файлик.

Опис завдання:

Для реалізації цього функціоналу я використовую nodejs, і я б хотів додати веб-інтерфейс для того, аби можна було б:

1. Прослухати необхідний звуковий файл в браузері
2. Сортувати та фільтрувати аудіо файли за:
  2.1 іменем користувача
  2.2 датою та часом
  2.3 назвою голосового каналу
3. Зліплювати декілька mp3 файлів в один, та можливість прослухати його та завантажити.*

*мається на увазі, що на каналі може вестись певна розмова, і прослуховувати кожну репліку окремо буде незручно, тому варто було б зліпити файли за деякий перідо часу таким чином, аби вихідний аудіо-файл представляв собою повну розмову декількох учасників, зі збереженням таймінгів.

Питання:

Яким чином краще зберігати ті файлики? Я б міг створювати директорії під канали і спускатись аж до днів, тобто структура була б така

- Назва каналу
-- Ім'я користувача та id
--- Дата
---- а тут вже йдуть самі файлики в імені котрих записаний лише час

З такою структурою було б зручно отримувати всі файлики від певного користувача, або всі файлики за певний день, але сортування файлів  лише за датою потребуватиме входження в кожну таку директорію і витягування всіх файлів, а потім їх сортування, і мені здається, що зберігати файлики саме в такій структуруі - це не найкращий варіянт.

Можна було б записувати файлики прямо в базу даних, але кожен такий файл може бути як маленьким,  так і до декількох мегабайт, і разом з файлом все одно треба буде записувати інформацію про нього.

Я ще думав, а що - якщо файли записувати так само - просто в одну директорію, а в бд записувати дані про певний файл включно зі шляхом до цього файлу, і потім, використовуючи бд можна сортувати і фільтрувати то все, як захочеться, і в кінці просто брати та й використовувати файлики, шляхи до котрих будуть в тому результаті, котрий поверне бд після всіх операцій.

При цьому варто зауважити, що створення файликів може бути постійно, і в цей момент може виникнути необхідність прочитати їх, тобто, воно входить, і виходить одночасно.

До речі, для зліплення файликів мені ж буде мало точності до секунд? Треба до мілісекунд?
І чим мені то зліплювати? В контейнері вже буде ffmpeg, воно ж може зліплювати аудіофайли?

Що порадите?

2

Re: Файлова система як БД. Відображення та маніпуляція файлами.

FakiNyan написав:

Я ще думав, а що - якщо файли записувати так само - просто в одну директорію, а в бд записувати дані про певний файл включно зі шляхом до цього файлу, і потім, використовуючи бд можна сортувати і фільтрувати то все, як захочеться, і в кінці просто брати та й використовувати файлики, шляхи до котрих будуть в тому результаті, котрий поверне бд після всіх операцій.

Це найкращий варіант, якщо сортування може бути за кількома критеріями. Але розбивку на каталоги усе одно додайте, бо у різних файлових системах є різні обмеження на кількість файлів у каталозі. Тому навіть якщо на самому сервері зараз усе працює нормально, то при переїзді на новий сервер, або з архівуванням даних можуть виникнути проблеми.

FakiNyan написав:

При цьому варто зауважити, що створення файликів може бути постійно, і в цей момент може виникнути необхідність прочитати їх, тобто, воно входить, і виходить одночасно.

Зі склеюванням файлу, який іще записується, можуть бути проблеми. Тому варто робити помітку в базі, що файл іще пишеться.

FakiNyan написав:

До речі, для зліплення файликів мені ж буде мало точності до секунд? Треба до мілісекунд?
І чим мені то зліплювати? В контейнері вже буде ffmpeg, воно ж може зліплювати аудіофайли?

Що порадите?

Навіть без перекодування, склеювання кількох файлів в один - то складна операція. Тому варто подумати, щоб юзери цим не зловживали.

Подякували: koala, FakiNyan2

3

Re: Файлова система як БД. Відображення та маніпуляція файлами.

FakiNyan написав:

Я ще думав, а що - якщо файли записувати так само - просто в одну директорію, а в бд записувати дані про певний файл включно зі шляхом до цього файлу, і потім, використовуючи бд можна сортувати і фільтрувати то все, як захочеться, і в кінці просто брати та й використовувати файлики, шляхи до котрих будуть в тому результаті, котрий поверне бд після всіх операцій.

Отак і робіть.

Подякували: FakiNyan1

4

Re: Файлова система як БД. Відображення та маніпуляція файлами.

Torbins написав:

Це найкращий варіант, якщо сортування може бути за кількома критеріями. Але розбивку на каталоги усе одно додайте, бо у різних файлових системах є різні обмеження на кількість файлів у каталозі. Тому навіть якщо на самому сервері зараз усе працює нормально, то при переїзді на новий сервер, або з архівуванням даних можуть виникнути проблеми.

так я це все в докер контейнері роблю, тому операційна система буде завжди одна й та сама, в мене зара alpine, бо nodejs під alpine значно менший розмір має, ніж просто node.

Torbins написав:

Зі склеюванням файлу, який іще записується, можуть бути проблеми. Тому варто робити помітку в базі, що файл іще пишеться.

то я тоді просто не буду додавати запис до бд до тих пір, поки файлик не запишеться повністю

Torbins написав:

Навіть без перекодування, склеювання кількох файлів в один - то складна операція. Тому варто подумати, щоб юзери цим не зловживали.

оке, там буде всього декілька людей, що зможуть таке робити - адміни та модератори, і будуть то робити досить рідко, я так думаю

5

Re: Файлова система як БД. Відображення та маніпуляція файлами.

Зберігати в одній директороії або в декількох з мінімальною вкладенність. Варто також розглянути використання метаданих аудіофайлів в поєднанні з або замість ведення записів в БД. У випадку використання метаданих варто знати про те що ID3 що використовується в MP3 штука доволі обмежена (можна писати в OGG).

6

Re: Файлова система як БД. Відображення та маніпуляція файлами.

мені ті метадані не дуже допоможуть в сортуванні та фільтруванні за багатьма критеріями, я про те теж думав