|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Делаю тут приложение для собственных нужд. В нём будет средних размеров БД на FireBird (выбрал его, потому что с ним есть хоть какой опыт). В приложении нужно будет хранить некий набор двоичных данных (примерное количество - пара сотен тысяч записей) размером от пары килобайт до пары мегабайт (по факту - документы с картинками). Разумеется не только их, но с остальными вопросов не возникает. Все эти данные требуется хранить в одной таблице, и тут возник вопрос: как оптимальнее их туда складывать - напрямую данные в BLOB поля таблицы или в таблице хранить только все остальные параметры и имя файла, а сами файлы - в отдельной папке/папках на диске? Как будет правильнее с точки зрения производительности базы данных? Повлияет ли большая таблица с BLOBами на скорость работы всей базы в целом или только на эту таблицу? P.S: Доступ к этим записям (и файлам) в 99% времени будет только на чтение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:17 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
alekcvp, Блобы вычитываются отдельно, поэтому в общем и целом - на производительность не повлиет. А хранить в отдельной папке - это лишний повод для ошибок - удалили из папки - оставили запись в БД. И наоборот. Со всеми вытекающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:22 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
DarkMasteralekcvp, Блобы вычитываются отдельно, поэтому в общем и целом - на производительность не повлиет. Ясно-понятно, спасибо. DarkMasterА хранить в отдельной папке - это лишний повод для ошибок - удалили из папки - оставили запись в БД. И наоборот. Со всеми вытекающими.Решаемо, если это цена скорость работы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:36 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
alekcvp> данные в BLOB поля таблицы или в таблице хранить только alekcvp> все остальные параметры и имя файла, а сами файлы - ... на диске? Этому флейму сто лет в обед. Храни в БД, не парься. alekcvp> Повлияет ли большая таблица с BLOBами на скорость alekcvp> работы всей базы в целом или только на эту таблицу? Считай, что ни на БД, ни даже на таблицу не повлияет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:52 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
alekcvp, сейчас вот аналогичным занимаюсь В общем в меру своих знаний для меня решающим было то что при хранении в базе можно без всяких заморочек достать содержимое (иначе ну насколько я понимаю, или расшаривать папки, или UDF, или еще что-то) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:10 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
У меня вопрос по этой же теме. Чтобы не плодить темы - хочу задать его тут: Планирую в БЛОБе хранить сканы поданых документов: заявления, справки и т.п. Какой размер страницы для БД лучше всего взять. Сканы будут храниться не в основной БД, а в отдельной, но по привязки ИД ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:10 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
akrush, если для хранения сканов хочется разместить их в отдельную БД, то возникает логический вопрос, а на хрена тогда вообще БД, проще в расшаренной папке хранить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:14 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
alekcvpнужно будет хранить некий набор двоичных данных (примерное количество - пара сотен тысяч записей) размером от пары килобайт до пары мегабайт (по факту - документы с картинками)типовая БД одна штука с типовым размером странички 16 кб, все это запихнуть в блобы, размер все едино не космический, если не выпендриваться, сервер вполне себе сдюжит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:22 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Симонов Денисakrush, если для хранения сканов хочется разместить их в отдельную БД, то возникает логический вопрос, а на хрена тогда вообще БД, проще в расшаренной папке хранить. Есть несколько причин: 1. При каждом обращении человек подает новое заявление и справки. Если хранить в папке - пользователя практически не реально заставить хранить информацию или в структуре или правильно называя файл. 2. Нет прямого доступа к персональным данным на сканах. Понятно что опытный пользователь откроет БД и посмотрит, но таких на 220 коиентов 1-3% 3. При 50тыс. заявителях - это либо дополнительно 50тыс. папок по номерам заявлений и внутри папки по номерам подачи разных заявлений, либо вообще все в одной папке. А это, даже при 5 обращениях+3 документа, 50000*5*3=750 000 файлов/папок. Не думаю что операционка себя будет комфортно чувствовать. Да и поиск в таком количестве усложняется, даже программный поиск. Готов выслушать (прочитать) возражения. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:32 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
m7mдля меня решающим было то что при хранении в базе можно без всяких заморочек достать содержимое Количество инструментов, которыми можно достать файл из папки, значительно превосходит количество инструментов, которыми можно достать файл из блоба, так что лично я не уверен где больше заморочек. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:51 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
akrushПланирую в БЛОБе хранить сканы поданых документов: заявления, справки и т.п. Какой размер страницы для БД лучше всего взять. 8к или 16к. К слову, про один из вопросов автора топика. Блобы в одной и той же таблице с остальными данными - в ФБ 2.5 лучше не хранить. Блобы будут "разреживать" данные, данные будут читаться медленее, чем могли бы (больше страниц, чем без блобов). Так что в 2.5 лучше блобы хранить в отдельной таблице, связанной с основной как 1:1 - в ФБ 3 пофиг, блобы можно валить в таблицу. Потому что в формате 3 есть primary и secondary pages. Блобы и прочее хранятся на secondary, записи - в основном на primary. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 13:29 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
akrush3. При 50тыс. заявителях - это либо дополнительно 50тыс. папок по номерам заявлений и внутри папки по номерам подачи разных заявлений, либо вообще все в одной папке. А это, даже при 5 обращениях+3 документа, 50000*5*3=750 000 файлов/папок. Не думаю что операционка себя будет комфортно чувствовать.Насколько мне изменяет склероз, операционка (Windows Server 2003) совершенно нормально чувствует себя при ~11 миллионах файлов в иерархии каталогов. Это по опыту позапрошлой работы, где проблемой было объём дисков (до полутерабайта), но никак не количество файлов. Даже если оставить в покое сервера, то "вот это" - Windows 7 x64 SP1+ (один из "развесистых" каталогов): Код: plaintext 1. 2. 3.
И, по опыту всё той же позапрошлой работы, могу сказать, что первый вариантом был как раз "блобы в базе". Сдохло, ибо: 1. Требуется больше места, чем на диске; 2. Сильно дороже по ресурсам. Вторым вариантом был "свалим все файлы в одном каталоге". Сдохло ибо сканирование ~65000 файлов в одном каталоге - (сравнительно) очень медленно. Третьим вариантом было хранение в иерархии каталогов. Вполне нормально, хотя реализация была далеко не идеальной. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 14:19 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Я такую задачу не решал, но как подумаю о бекапе базы с большим количеством картинок... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 15:18 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Шавлюк ЕвгенийЯ такую задачу не решал, но как подумаю о бекапе базы с большим количеством картинок... А как бэкап зависит от картинок? 2Гб база с картинками будет бэкапиться медленнее, чем 2Гб база с текстами? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 19:24 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Нет, он про то, что чем "бэкапить/ресторить" 1Тб БД гораздо удобнее иметь 10Гб БД + 990Гб папку с файлами (и место на бэкапы сэкономить, ибо последние вообще можно реже хранить - не ежедневные срезы). Но в твоём случае по озвученным цифрам бояться особо нечего. Если ты туда весь каталог фильмов не хочешь запихать, конечно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 20:27 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
akrush> Какой размер страницы для БД лучше всего взять. Максимальный из имеющихся (т.е. 16К в 2.5). И не забыть писать их тоже большими кусками (например, 4096). Какую библиотеку доступа используешь, FIBPlus ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 20:37 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамСчитай, что ни на БД, ни даже на таблицу не повлияет.Ну вообще бывает, что влияет. И на скорость выборок, и на скорость сборки мусора, и на скорость бэкапов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 01:28 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Шавлюк ЕвгенийЯ такую задачу не решал, но как подумаю о бекапе базы с большим количеством картинок... По опыту - бэкап папки с полмиллионом маленьких картинок - еще сложнее. В операционке файлы одной папки лежат в плоском неиндексированном списке, и тормозит по этой причине очень хорошо. Такие вещи что бы скопировать - приходится сначала закинуть в архив, хоть бы и без сжатия, главное что бы файл получился один вместо полмиллиона. Его копируешь куда надо и там уже разворачиваешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 03:39 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
fraksПо опыту - бэкап папки с полмиллионом маленьких картинок - еще сложнее.Нормальные люди не хранят полляма файлов в одном каталоге. Правда, как показывает мой опыт, некоторым разработчикам требуется две попытки, чтобы сделать общеизвестные вещи.
Чтобы перенести ~600Гб "разновсякого бутора" со старого диска на новый я, таки, воспользовался потоковым вариантом (утилита, использующая Backup API), но вот архиву и в этой схеме места не нашлось. По результату могу сказать, что скорость копирования примерно соответствовала скорости линейного чтения/записи дисков. Не на сто процентов, конечно, но без каких-либо катострофических проседаний. Полумиллиона совсем мелких файлов у меня, конечно, не было, но те же полляма с разбросом размеров от единиц-десятков килобайт до единиц-десятков мегабайт - были. Естественно, не в одном каталоге, а во вполне развесистой иерархии. В общем, если у вас или очень медленная среда передачи (100МБит и менее) или очень быстрые диски (200МБайт/с и более), то использование потокового сжатия позволит сэкономить время на передачу. Отдельно подчеркну, что в нормальном сценарии, время чтения/записи сэкономлено быть не может. Вариант "делаем архив на том/раздел архивируемых данных" из нормальных сценариев бэкапа - исключаем. Ну вот в реальной жизни такое быть может, но нормальным положением вещей считаться не может. Ну и файловые системы, у которых нет индекса для записей каталога это какой-то оксюморрон. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 05:38 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Basil A. SidorovfraksПо опыту - бэкап папки с полмиллионом маленьких картинок - еще сложнее.Нормальные люди не хранят полляма файлов в одном каталоге. Набралось со временем :) Это картинки товаров к справочнику товаров. Сейчас это занимает примерно 3,5 гига. Закачивание этих файликов поштучно через ftp на другой комп занимает немеряно времени. Закачивание всего этого в одном файле архива, без сжатия - вполне адекватное. В проводнике скопировать такую папку - тоже не дождешься. В консоли - не помню, но там непонятно сколько прошло и сколько осталось ждать у моря погоды. С некоторых пор я использую для этого FreeFileSync. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 06:25 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
fraksНабралось со временем :)И это время ничему не учит ... Ну не нужно никому "realname" файла в служебном каталоге. Взяли монотонно растущий идентификатор из базы, преобразовали в строку, дополнили ведущими нулями до девяти цифр, взяли две первые группы по три цифры и получили чёткую балансировку по каталогам и предельно однозначную идентификацию местонахождения файла. Совершенно несложным способом эта схема расширяется на вариант "у нас много точек хранения", если (когда) вам потребуется разнести хранилище по нескольким физическим томам. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 06:40 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovm7mдля меня решающим было то что при хранении в базе можно без всяких заморочек достать содержимое Количество инструментов, которыми можно достать файл из папки, значительно превосходит количество инструментов, которыми можно достать файл из блоба, так что лично я не уверен где больше заморочек. Процитирую себя полностью и выделю ключевую фразу m7mВ общем в меру своих знаний для меня решающим было то что при хранении в базе можно без всяких заморочек достать содержимоеи таки для меня легче достать из блоба ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 07:04 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Как сделать так что бы бэкап базы и бэкап папки не расходились? Например: Делаю бэкап базы, затем или одновременно делаю бэкап папки при этом пользователь удаляет/добавляет/меняет данные и файлы в бэкап папки могут не попасть те файлы которые удалились и попадут которые добавились ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 07:51 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Basil A. SidorovfraksНабралось со временем :)И это время ничему не учит ... Ну не нужно никому "realname" файла в служебном каталоге. Взяли монотонно растущий идентификатор из базы, преобразовали в строку, дополнили ведущими нулями до девяти цифр, взяли две первые группы по три цифры и получили чёткую балансировку по каталогам и предельно однозначную идентификацию местонахождения файла. Совершенно несложным способом эта схема расширяется на вариант "у нас много точек хранения", если (когда) вам потребуется разнести хранилище по нескольким физическим томам. Имя файла у меня сейчас - ID товара в базе. Нулями не добиваю. Переделать как бы можно, но есть несколько НО. Этой папкой-первоисточником пользуются еще несколько программ, которые уже не мной написаны. Их тоже придется переделывать. Так же она зеркалируется в инет-магазин и просто в инет, и на эти картинки делаются ссылки в прайсе. Изменим систему хранения - отвалится старое. Вот такая селяви. Если по твоим словам, в файловой системе каталоги индексируются, то при большом количестве файлов в папке проблема в основном одна - клиентские программы типа проводника очень хреново с ними работают. Ну и пофиг. Туда через проводник лазить незачем. Для копирования и синхронизации есть "более другие" (с) средства. Живем дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 08:04 |
|
Как лучше хранить данные в БД
|
|||
---|---|---|---|
#18+
Конечно, тем кто начинает разрабатывать систему где потенциально может быть много файлов - лучше заранее продумать ситуацию с многими файлами. Вспоминаются грабли когда я "сэкономил" и под ID справочника контрагентов отвел smallint. И под справочник авторов отвел диапазон в 10000 кодов. И то и другое довольно быстро уперлось в потолок. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2018, 08:07 |
|
|
start [/forum/topic.php?fid=40&msg=39633082&tid=1561107]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 321ms |
total: | 567ms |
0 / 0 |