|
|
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Планируется создать файло обмнеик. Php +mysql +Apache+ nginx Хотел узнать мне опытных людей как лучше организовать структуру папок пользователей в базе данных или в файловой системе. Однозначно документы будут храниться на диске в базе данных только ссылки на них. Поскольку файлов будет очень много и постоянно будут скачиваться и закачивается, объемы файлов до 10ГБ. Даль больше. Каждый пользователь может создавать свои папки, сколько угодной вложенности. Есть идея хранить структуру папок в базе данных. Это позволяет: 1. легко выполнять операции переноса файлов с одной папки в другую 2. организовать доступ к папке тем пользователя, которым нужно. 3. Удобно при использование нескольких файловых хранилищ т.е. файлы в одной папке могут храниться на разных серверах. 4. Ну и нет нагрузки на файловый сервер. А вот из минусов, какие могут быть при такой реализации? Не будет ли проблем с базой когда кол-во пользователей разрастется до 100 000 и более? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 09:50:40 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
В целом подход правильный. Только вот смущает:Valerik2. организовать доступ к папке тем пользователя, которым нужно.Не ясно, каким образом тут замешана база данных. Должен ли получить доступ к файлу сторонний пользователь, не входящий в подмножество "которым нужно", если в адресной строке браузера введет правильный адрес файла? Модератор: Тема перенесена из форума "MySQL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 12:22:21 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
А прямого доступа к файлам не будет. Серверу будет посылаться запрос пита [files/gjeqrwqopiki13rp23ioiripo12] Php согласно этому hash коду находит данные в базе данных и через nginx отдает файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 20:03:49 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Мне вот что интересно. Что будет работать быстрее такой вот подход хранение дерева папок пользователя в базе данных или же все таки файловой системе. Когда кол-во пользователей вырастет больше 100 000 и у каждого пользователя будет свое дерево. Я так понял в данном случаи, что для быстрой работы с базой обычная древовидная структура базы не подойдет (типа ID, PARENTID, …. Идт).? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 20:19:38 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Когда нагрузка по-настоящему станет горячей, ни то, ни другое в чистом виде не будет максимально эффективным. Ну какие это объемы будут? Там уже о кластеризации, кешировании и прочей лобуде думать надо. Даже о том, как роутинг вообще от php отобрать и отдать специализированному более скорострельному решению. А не о том, что не по приколу ли в БД засунуть? Ну а так, если делить мир на белое и черное, то большие файлы пхать и читать в БД сомнительная польза, а вот миллионы пузатой мелочи меньше размера пары минимальных блоков записи/чтения - это уже пошесть, от которой голова чешется. Интуитивно возникает желание как-то это все культурно сгрузить и скатекой прикрыть, чтобы не маячило =)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 20:45:23 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
ValerikЧто будет работать быстрее такой вот подход хранение дерева папок пользователя в базе данных или же все таки файловой системе. Когда кол-во пользователей вырастет больше 100 000 и у каждого пользователя будет свое дерево.А в том ли вопрос то? Насчет файловой системы: делайте такую организацию, чтоб в одной папке было не более тысячи элементов (файлов или папок). При бОльших количествах много времени уходит на чтение каталога. Это в любом случае, независимо от того как будете строить дерево (по базе или по ФС). Но это так, к сведению. Далее, при замахе на оверстотыщ юзеров скорее всего одного то сервера и не будет достаточно. Потому будете хранить в БД не только путь до файла в ФС, но и имя сервера, который этот файл отдавать будет. И еще придумаете как этот сервер будет разбираться, можно ли юзеру отдавать этот файл или нет. Скорее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 21:02:27 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
vkleValerikЧто будет работать быстрее такой вот подход хранение дерева папок пользователя в базе данных или же все таки файловой системе. Когда кол-во пользователей вырастет больше 100 000 и у каждого пользователя будет свое дерево.А в том ли вопрос то? Насчет файловой системы: делайте такую организацию, чтоб в одной папке было не более тысячи элементов (файлов или папок). При бОльших количествах много времени уходит на чтение каталога. Это в любом случае, независимо от того как будете строить дерево (по базе или по ФС). Но это так, к сведению. Далее, при замахе на оверстотыщ юзеров скорее всего одного то сервера и не будет достаточно. Потому будете хранить в БД не только путь до файла в ФС, но и имя сервера, который этот файл отдавать будет. И еще придумаете как этот сервер будет разбираться, можно ли юзеру отдавать этот файл или нет. Скорее всего. Так это и не планируется хранить все на одном сервере. По мере разрастания, и файловый сервер создавать новый и базу новую заводить. Про то что в папочке хранить не более тысячи элементов это понятно, пока идея хранить файлы в папках по времени закачки каждый час новая папка. Про то как отдавать пользователю файл или нет, может я чего-то не до понимаю? Пока идея такая серверу передается hash ID файла по нему в базе смотрим кому принадлежит этот файл и кто его запрашивает если у этого пользователя есть доступ к этому файлу то отдаем его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 22:38:50 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Edd.DragonКогда нагрузка по-настоящему станет горячей, ни то, ни другое в чистом виде не будет максимально эффективным. Ну какие это объемы будут? Там уже о кластеризации, кешировании и прочей лобуде думать надо. Даже о том, как роутинг вообще от php отобрать и отдать специализированному более скорострельному решению. А не о том, что не по приколу ли в БД засунуть? Это какому решению мона отдать? мона пример? Edd.DragonНу а так, если делить мир на белое и черное, то большие файлы пхать и читать в БД сомнительная польза, а вот миллионы пузатой мелочи меньше размера пары минимальных блоков записи/чтения - это уже пошесть, от которой голова чешется. Интуитивно возникает желание как-то это все культурно сгрузить и скатекой прикрыть, чтобы не маячило =)) Сомневаюсь что в БД хранить хорошая затея, будет большая нагрузка на базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 22:43:05 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
ValerikТак это и не планируется хранить все на одном сервере. По мере разрастания, и файловый сервер создавать новый и базу новую заводить. Про то что в папочке хранить не более тысячи элементов это понятно, пока идея хранить файлы в папках по времени закачки каждый час новая папка. Про то как отдавать пользователю файл или нет, может я чего-то не до понимаю? Пока идея такая серверу передается hash ID файла по нему в базе смотрим кому принадлежит этот файл и кто его запрашивает если у этого пользователя есть доступ к этому файлу то отдаем его. 1. по поводу если через файловую систему делать: А чем вам не устраивает вариант: array_merge(scandir(), scandir()....) ? 2. по поводу 100,000... ну не такие большие это цифры, вполне нормально должна справляються Еще никто не отменял а) шардинг б) репликация что позволит вам хоть 1000,000,000 файлов хранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 22:46:39 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Предлагаю лучше подумать над более важными проблемами, например над горизонтальным масштабированием. 100.000 пользователей (ну теоретически с ваших слов) займут своими файлами не мало дискового пространства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 22:57:27 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
ValerikСомневаюсь что в БД хранить хорошая затея, будет большая нагрузка на базу. Это очень плохая идея, в данном случае, т.к. придется отдавать файлы уже используя интерпретатор, что повлечет за собой огромный расход памяти при большом числе долговременных соединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2012, 23:00:06 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
РенатValerikТак это и не планируется хранить все на одном сервере. По мере разрастания, и файловый сервер создавать новый и базу новую заводить. Про то что в папочке хранить не более тысячи элементов это понятно, пока идея хранить файлы в папках по времени закачки каждый час новая папка. Про то как отдавать пользователю файл или нет, может я чего-то не до понимаю? Пока идея такая серверу передается hash ID файла по нему в базе смотрим кому принадлежит этот файл и кто его запрашивает если у этого пользователя есть доступ к этому файлу то отдаем его. 1. по поводу если через файловую систему делать: А чем вам не устраивает вариант: array_merge(scandir(), scandir()....) ? 2. по поводу 100,000... ну не такие большие это цифры, вполне нормально должна справляються Еще никто не отменял а) шардинг б) репликация что позволит вам хоть 1000,000,000 файлов хранить. Вот я и хочу определиться в каком направление лучше двигаться. Что быстрее и лучше будет работать, когда пользователей станет много. Быстрее будет вытаскивать данные о структуре папок и файлах из файловой системы или же из базы все это вытаскивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 00:03:15 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
HettПредлагаю лучше подумать над более важными проблемами, например над горизонтальным масштабированием. 100.000 пользователей (ну теоретически с ваших слов) займут своими файлами не мало дискового пространства. С пространством думаю проблем не должно возникнуть у каждого пользователя будет свой лимит, при надобности будет выделяться дополнительный сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 00:05:36 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Valerikпри надобности будет выделяться дополнительный серверТогда построение дерева пользовательских файлов по ФС отпадает - слишком долгая и сложная операция при межсерверном взаимодействии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 02:51:04 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
vkleValerikпри надобности будет выделяться дополнительный серверТогда построение дерева пользовательских файлов по ФС отпадает - слишком долгая и сложная операция при межсерверном взаимодействии. Не понял, в данном случае лучше будет дерево папок хранить в БД? Я правильно вас понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 03:31:15 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Более того, одинаковых файлов будет много и хранить все дубликаты не имеет смысла. В случае с хранением структуры в ФС можно было бы конечно создавать вторую жесткую ссылку на файл, но в случае с распределенной системой у вас этого не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 10:06:35 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Да и даже в случае с одним сервером дисковых устройств будет наверное больше, чем 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 10:07:09 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
ValerikЭто какому решению мона отдать? Серверу на с++, который будет отвечать требованиям минимизации холостого хода и благодаря нативности кода, и благодаря отсутствию массы лишних действий. Хотя в принципе связка nginx / memcached / fastcgi php, ну и грамотная балансировка нагрузки при наличии нескольких веб-серверов должны достаточно долго протянуть (зависит конечно от того, какими темпами стартап пойдет в гору). А дальше в любом случае придется принимать в команду специалистов, которые имеют практику за плечами, чтобы иметь возможность удовлетворять растущие потребности быстрее чем они собственно растут )) Это и к вопросу авторВот я и хочу определиться в каком направление лучше двигаться. А для начала вообще надо приучиться тот же php не нагружать лишними действиями. А то вот так обсуждаем, обсуждаем. А за кадром пишется код, который преследует удобство программиста в ущерб эффективности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 11:35:03 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Кстати вот, давно интересно, есть у кого-нибудь реальный опыт использования подобных решений на Java: http://gearman.org/index.php#how_does_gearman_work Или они полезны только в переходные периоды, только когда есть необходимость объединить разноязычные компоненты, и только на время, пока этот зоопарк не будет переписан под что-то одно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 11:39:39 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
HettБолее того, одинаковых файлов будет много и хранить все дубликаты не имеет смысла. В случае с хранением структуры в ФС можно было бы конечно создавать вторую жесткую ссылку на файл, но в случае с распределенной системой у вас этого не получится. Хорошо. Где хранить структуру папок (в базе понятно). Тогда другой вопрос, как хранить все эти деревья в базе что бы запросы с таблицей дерева папок быстро работал. Я имею ввиду, вот у меня 100 000 пользователей, каждый их которых на создавал свое дерево папок, как будет работать MySQL при такой нагрузке? И как лучше организовать структуру такой таблице, что бы пользователь мог быстро получить всю структуру своих папок? Понятно, что простым ID, PARENTID тут не обойтись что тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 21:18:17 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Зачем в базе хранить какие-то деревья? Разве работа между сервером и юзером подразумевает это? У юзера есть список файлов (возможно тегированный/категоризированный). Каждый файл имеет имя, дату, кол-во скачиваний и т.д. Для сервера каждый файл еще имеет путь, где он лежит. Зачем этот список файлов юзера рассматривать как дерево? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 21:50:02 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Valerik, Хотите быстро и на мускуле? Тогда структуру папок можно хранить в серилизованном массиве, так сказать, в готовом к употреблению виде. Вы уверены, что именно мускуль будет использоваться в качестве СУБД и это есть лучшее/оптимальное решение? Valerikкак будет работать MySQL при такой нагрузке?А уже известна нагрузка, есть структуры таблиц, тексты и планы запросов? Тогда этот вопрос лучше задать в профильном форуме :-) PS: Слова "чтобы" и "насоздавал" пишутся слитно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 21:50:09 |
|
||
|
файло обмнеик.
|
|||
|---|---|---|---|
|
#18+
Valerik, Обратите внимание на Webdav, как раз для ваших целей. Из плюсов этого протокола - можно обойтись без php и mysql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 21:58:07 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=37787055&tid=1465178]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
186ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
2ms |
| others: | 191ms |
| total: | 445ms |

| 0 / 0 |
