|
|
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
Всем привет! Организации необходимо ассоциировать файлы (изображения, doc, xls, …) с информацией о персонале/соискателях (10k – 30k человек), размещённых в реляционной базе под управлением Sql Server 2005 Express + Windows 2003 Server. Файлы планируется держать в файловой системе (не в виде BLOB полей базы) и возникает вопрос о наиболее удачной с точки зрения производительности/удобства сопровождения иерархии каталогов на жёстком диске. Наиболее частая операция –получение списка ассоциированных файлов и доступ к содержимому. Что вы думаете о таком устройстве каталогов: Корневой каталог -> 16 подкаталогов по первой букве ID пользователя (ID – это GUID) -> подкаталоги по ID пользователя -> файлы. Например: Data -> A -> AB32B3EF…, A05234DE… -> Файлы отдельного пользователя. Я ввёл дополнительные каталоги (0, 1, 2, … D, E, F) по первому символу ID для удобства навигации через браузер. Список на 30K подкаталогов одного каталога на сервере открываются в течение 8-10 секунд. Однако, скажется ли это на времени доступа к файлам пользователя против плоской структуры каталога? С пользователем может быть связано переменное число файлов различного типа, например, персональные изображения. Как вы обычно управляете порядком извлечения файлов из каталога? Например, пользователь закачал 10 изображений, и необоходимо не только извлекать их всегда в одном порядке, но и дать возможность изменять порядок извлечения (переставлять изображения, документы). Посоветуете ли вы держать словарик файлов с приоритетом на БД или можно обыграть такие вещи через имя файла? Словарик потребует дополнительной синхронизации и мне бы не очень хотелось его вводить Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 06:18 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
the_flow1. ... Корневой каталог -> 16 подкаталогов по первой букве ID пользователя (ID – это GUID) -> подкаталоги по ID пользователя -> файлы. Например: Data -> A -> AB32B3EF…, A05234DE… -> Файлы отдельного пользователя. Я ввёл дополнительные каталоги (0, 1, 2, … D, E, F) по первому символу ID для удобства навигации через браузер. Список на 30K подкаталогов одного каталога на сервере открываются в течение 8-10 секунд. Однако, скажется ли это на времени доступа к файлам пользователя против плоской структуры каталога? ... 2. Посоветуете ли вы держать словарик файлов с приоритетом на БД или можно обыграть такие вещи через имя файла? Словарик потребует дополнительной синхронизации и мне бы не очень хотелось его вводить Заранее спасибо! 1. В общем случае ваша структура хранения - довольно неплоха. Единственнй вопрос - нужно ли пользователям лазить в файлы минуя вашу систему хранения? Если да - то гуид в качестве имени не лучший вариант. 2. Порядок файлов однозначно держать в БД. Просто список файлов с полем - приоритет сортировки. а с чем вы его синхронизовать то собрались? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 07:16 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
Дмитрий16, Синхронизовать ссылки на файлы из словарика с наличием файлов на жёстком диске. Поскольку операция удаления записи и удаления файла на Sql 2005 невозможно объединить в одну транзакцию (насколько я знаю), а также не исключён администраторский доступ к файловому хранилищу в обход системы, то возможны расхождения между данными таблички-словаря и реальными данными на жёстком диске. Вероятно, здесь мне придётся создавать дополнительную задачу, что будет проверять синхронность данных, скажем, раз в сутки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 07:22 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
the_flowпроверять синхронность данных, скажем, раз в сутки.а как вы будете проверять, например, правку/подмену файла? Насчет деления на каталоги - я бы предложил делить по двум первым буквам, чтобы ни в какой части иерархии не образовывалось слишком много объектов в одном каталоге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 07:42 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
the_flowДмитрий16, Синхронизовать ссылки на файлы из словарика с наличием файлов на жёстком диске. Поскольку операция удаления записи и удаления файла на Sql 2005 невозможно объединить в одну транзакцию (насколько я знаю), а также не исключён администраторский доступ к файловому хранилищу в обход системы, то возможны расхождения между данными таблички-словаря и реальными данными на жёстком диске. Вероятно, здесь мне придётся создавать дополнительную задачу, что будет проверять синхронность данных, скажем, раз в сутки. Тут возможны варианты. Например, проверять наличие файла в момент доступа к нему (или к множеству файлов). Ибо даже синхронизация не спасет от того, что - кто нибудь удалит файл за несколько милисекунд до его фактического открытия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 08:19 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
Дмитрий16, Вот поэтому к словарику для хранения очередности показа я настроен скпетически. Столько вопросов. С другой стороны, если надо хранить историю изменений файлов, тэги, поиск приделывать, и вообще (со временем, в ближайшие полгода это не потребуется) мигрировать в сторону полноценного документооборота, то я наверное возьму готовое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 08:22 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
miksoft, Спасибо, я подумаю насчёт первых двух символов, а так доступ к файлам через файловый менеджер для пользователей не предусматривается) файлы будут доступны только на чтение. Хотя, требования всегда могут поменяться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 08:34 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
>> Насчет деления на каталоги - я бы предложил делить по двум первым буквам, >> чтобы ни в какой части иерархии не образовывалось слишком много объектов >> в одном каталоге. А что, лучше их на второй уровень перенести, что ли? Логичнее иерархию сделать по буквам (по одной или по двум). Причем в случае "по одной" - удобнее по этому хозяйству перемещаться в файловых менеджерах. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 12:09 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
the_flow wrote: > Файлы планируется держать в файловой системе (не в виде BLOB полей базы) > и возникает вопрос о наиболее удачной с точки зрения > производительности/удобства сопровождения иерархии каталогов на жёстком > диске. Я не понимаю, зачев вам вообще какая-то левая струткура в файловой системе, если у вас есть БД, где можо хранить все связи, а к файловой системе иметь только ссылки, на всё равно как называющиеся и где лежащие файлы. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2009, 00:09 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
MasterZiv Я не понимаю, зачев вам вообще какая-то левая струткура в файловой системе, если у вас есть БД, где можо хранить все связи, а к файловой системе иметь только ссылки, на всё равно как называющиеся и где лежащие файлы. Отвечу за автора, ибо сталкивался с подобной задачей. Тут все дело в скорости поиска файла в папке самой операционкой. До 1000 файлов в каталоге - это еще работает но когда их много - могут наступать дикие тормоза. Собственно поэтому и приходится городить некую "систему индексации" файлов в каталогах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2009, 07:23 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
Дмитрий16 wrote: > Тут все дело в скорости поиска файла в папке самой операционкой. До 1000 > файлов в каталоге - это еще работает но когда их много - могут наступать > дикие тормоза. Собственно поэтому и приходится городить некую "систему > индексации" файлов в каталогах. Открыть файл по имени в операционке -- дикие тормоза ? Не верю. Если так, выкидывай такую операционку. Индексы должны быть внутри файловой системы. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2009, 11:48 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
MasterZivОткрыть файл по имени в операционке -- дикие тормоза ? Не верю. Если так, выкидывай такую операционку. Индексы должны быть внутри файловой системы. Само по себе открытие файла - быстрая операция, и индексы в ос работают (наверное) Но при использовании различных утилит ОС могут быть проблемы - авторы часто не расчитывают и не тестируют их на большое к-во файлов в каталоге. Мы тоже в одном проекте хранили большое к-во файлов - делали 65000 каталогов в 2-х уровнях (256*256), а в них уже файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2009, 12:10 |
|
||
|
Посоветуйте структуру хранилища файлов
|
|||
|---|---|---|---|
|
#18+
MasterZiv Дмитрий16 wrote: > Тут все дело в скорости поиска файла в папке самой операционкой. До 1000 > файлов в каталоге - это еще работает но когда их много - могут наступать > дикие тормоза. Собственно поэтому и приходится городить некую "систему > индексации" файлов в каталогах. Открыть файл по имени в операционке -- дикие тормоза ? Не верю. Если так, выкидывай такую операционку. Индексы должны быть внутри файловой системы. Речь шла не только про открыть но и про отсортировать по определнному критерию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2009, 12:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36047262&tid=1543186]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 442ms |

| 0 / 0 |
