|
Структура данных для организации доступа к документам
|
|||
---|---|---|---|
#18+
Имеем следующее: Справочник пользователей; Таблица с документами (в полях этой таблицы сейчас есть три ссылки на пользователей, например: создатель записи, бригадир, контролёр); Каждому пользователю отображаются только доступные ему документы, отбираемые из всех на основе упомянутых выше трех полей. Требуется: Теперь все это хозяйство требуется распространить на сотню филиалов, но появляется дополнительное требование: должна быть возможность сделать документ, числящийся в конкретном филиале, доступным одному или нескольким пользователям, находящимся в этом же и/или в другом филиале. Вопрос в том, чтобы оценить различные варианты структурно-технической реализации с точки зрения баланса производительности и безопасности. Производительность очень важна потому, что каждый пользователь обязательно и постоянно просматривает выборку всех доступных ему актуальных документов (не актуальные документы исчезают у него из списка после того, как стали неактуальными по определенным признакам), а также все доступные ему документы должны включаться в различные аналитические отчеты. Собственно, мои варианты: 1) Хранить все в одной БД с добавлением следующей таблицы (далее - "новая таблица"): Пользователь; Ссылка на документ. При этом добавлять автоматически в эту таблицу в том числе и записи, основанные на значениях полей "создатель, бригадир, контролер". Плюсы такого варианта: новая таблица будет централизованным источником информации о доступных пользователю документах. Минусы такого варианта: кол-во записей в этой новой таблице будет более чем в три раза превышать суммарное по всем филиалам количество документов, а доступ на добавление и чтение в нее будет постоянным. Поэтому она станет бутылочным горлышком. 2) Хранить все в одной БД с добавлением такой же, как в 1, таблицы: Пользователь; Ссылка на документ. Но не добавлять автоматически в эту таблицу записи, основанные на значениях полей "создатель, бригадир, контролер", а добавлять только доступ для "дополнительных" пользователей. Плюсы такого варианта: не будет гигантского количества записей в новой таблице и постоянной записи в нее. Минусы такого варианта: придется везде при выборке собирать информацию и из новой таблицы и фильтровать дополнительно сами документы по трем полям. 3) Хранить документы филиалов в разных БД. Как в этом варианте правильно сделать отображение у пользователя документов, которые кто-то для него открыл - тоже есть разные варианты... Например, наиболее быстродействующим считаю вариант создания у пользователя задач-клонов, которые в случае изменения будут обновляться с помощью отдельной системы репликации (в том числе и в пределах одной БД, но у разных пользователей). Плюсы этого варианта: возможность работы БД каждого филиала на своем сервере этого филиала, а следовательно, распределение нагрузки, географическое распределение отказоустойчивости, ограничение доступа админов каждой БД только к данным своего филиала. Минусы: дополнительное звено репликации документов между БД. Хочу услышать мнения и другие варианты. Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2012, 20:07 |
|
Структура данных для организации доступа к документам
|
|||
---|---|---|---|
#18+
Kulavert, KISS - поэтому имхо первый. Но для этого нужно содать тестовый стенд, симитировать ожидаемую нагрузку (а лучше больше), посмотреть что может предложить ваша СУБД для этого и т.д. и на все это посмотреть, пощупать, потрогать, друзьям показать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2012, 08:58 |
|
Структура данных для организации доступа к документам
|
|||
---|---|---|---|
#18+
Kulavert, первый вариант самый простой, соответственно, самый надежный. второй вариант будет более тяжелым - в вашем случае операций чтения будет намного больше, чем записи. третий даже рассматривать не хочется - сложные правила будут порождать проблемы (в одной базе добавили доступ, в другой в то же время убрали - надо вручную решать конфликт или писать сложные правила - классика жанра). и почему возник вопрос? неужели у вас каждый филиал создает десятки документов в секунду? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2012, 12:35 |
|
Структура данных для организации доступа к документам
|
|||
---|---|---|---|
#18+
Максим НKISS - поэтому имхо первый. KISS - что это? (Гугл в неадеквате :)) s_ustinovи почему возник вопрос? неужели у вас каждый филиал создает десятки документов в секунду? Много или мало - понятия относительные... Если бы это была "главная ERP" и ее поставили на большой и шумный сервер, который бы еще десять лет не напрягаясь проглатывал кучи новых данных и тучи запросов, то на вопрос производительности можно было бы забить, как это делают многие кодеры, которым лишь бы накодить здесь и сейчас, а когда оно через два года тормозить начнет (причем не только из-за недостаточной железной мощи, но и например из-за блокировок в таблице), они скажут "ну оно же работало, а как мы могли знать!..." В общем, вопрос правильного проектирования возникает не потому что "сейчас", а потому что надо думать на несколько лет вперед, а прогноз подозревает, что документов будет миллион... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2012, 19:46 |
|
Структура данных для организации доступа к документам
|
|||
---|---|---|---|
#18+
KulavertKISS - что это? (Гугл в неадеквате :)) Воот - http://en.wikipedia.org/wiki/KISS_principle ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2012, 20:55 |
|
|
start [/forum/topic.php?fid=33&msg=38015211&tid=1547774]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 138ms |
0 / 0 |