|  31.08.2007, 14:59 | #1 | 
| Участник |  Распределенная база данных на основе View 
			
			Не уверен, что вопрос относится к собственно "программированию", но, тем не менее... Необходимо оценить жизнеспособность описанной ниже идеи организации базы данных на MS SQL 2000 или MS SQL 2005. Создается специальная база данных MS SQL в которой вместо всех, т.е. вообще ВСЕХ таблиц (ну, может за некоторым исключением) создаются VIEW с тем же именем и той же структурой вида PHP код: 
			Далее собствено AXAPTA подкладываем в качестве базы данных эту "сводную" базу данных. Т.е. AXAPTA "думает" что обращается к таблице MS SQL, но на физическом уровне обращение идет через View. Эксперимент проводился на AXAPTA 2.5 SP3 + MS SQL 2005. ЭТО РАБОТАЕТ! Как на чтение (что ожидаемо), так и на запись (нужны определенные настройки таблиц и дополнительный CONSTRAINT). Пока, разумеется, как тестовый пример на нескольких таблицах. Также понятно, что при "падении" одной базы "упадет" и эта общая база. Просто View не сможет сделать выборку. Вопрос о другом. Какие проблемы могут быть собственно в AXAPTA при работе с такой базой? Конечная цель - получить хранение разных компаний физически в разных базах MS SQL. Но с общими справочниками и возможностью взаимодействия между базами (копирование некоторых данных) Т.е. предполагается, что в разных базах MS SQL будут данные с разным (не пересекающимся) значением DataAreaId. Виртуализированные таблицы будут хранится в какой-то одной базе (отпадает проблема синхронизации справочников). А вопрос взаимодействия решается штатным ChangeCompany(). | 
|  | 
|  31.08.2007, 15:16 | #2 | 
| Участник | 
			
			По теме не скажу ничего, кроме того, что это довольно извратно   Мне вот интересно про запись спросить. А в какую базу данных вставляется строка при добавлении ее из Аксапты? Врядли View это сама раздупляет   | 
|  | 
|  31.08.2007, 15:21 | #3 | 
| Участник | 
			
			Могу повторить. Мне не жалко. ЭТО РАБОТАЕТ! Специально проверял запись, иначе не имеет смысла связываться. Идет куда надо и как надо. В нужную базу. Видимо, именно сам View и "раздупляет"
		 | 
|  | 
|  31.08.2007, 16:25 | #4 | 
| Участник | Цитата: А почему не стали использовать репликацию? чем не угодила? | 
|  | 
|  31.08.2007, 16:39 | #5 | 
| Участник | 
			
			Здесь под View подразумевается Partitioned View, это функционал есть и в MS SQL 2000 и 2005. Partitioned View позволяет создавать представления объединяющие две и более таблиц с одинаковой структурой, расположенные на одном или нескольких физических серверах. При соблюдении определенных условий можно получить обновляемое представление с которым помимо операции SELECT можно выполнять INSERT, UPDATE и DELETE. Partitioned View является предшественником Partitioned Table (MS SQL 2005). Более подробную/техническую информацию можно узнать в BOL и на http://sql.ru.
		 | 
|  | 
|  31.08.2007, 17:01 | #6 | 
| Участник | 
			
			Спасибо за ссылку! Но это нужно для оптимизации работы больших баз данных. Здесь, насколько я понимаю, проблема другая : Конечная цель - получить хранение разных компаний физически в разных базах MS SQL. Но с общими справочниками и возможностью взаимодействия между базами (копирование некоторых данных) Не проще ли настроить репликацию? И надёжность выше будет. Или я что-то не догоняю? | 
|  | 
|  31.08.2007, 17:07 | #7 | 
| Участник | 
			
			Поскольку, как обычно, вопрос скатился к сакраметальному "а зачем это надо", объясняю: 1. Начальник всегда прав  В данном случае, в качестве начальника выступает наш аналитик, который настивает на выделении некоторых компаний в физически отдельные базы данных. В основном, по соображениям безопасности хранения и доступа информации. 2. Размер базы данных перевали за 200 ГБ. Распределение базы данных позволит более гибко подойти к распределению нагрузки на сервера и выделению места под хранение. При этом, встает ряд чисто технических проблем по обмену информацией между этими компаниями. Некоторая часть информации должна "копироваться" из одной компании в другую, попутно порождая ряд взаимосвязанных документов. Связанных между компаниями. Здесь под "копированием" понимается не "тупое" копирование, а именно создание весьма специфических документов. В то время, как репликация - это именно "тупое" копирование с минимальной модификацией. Как решить эти проблемы через репликацию - не представляю. Или что подразумевается под термином "репликация"? Репликация где? На каком уровне? На это обсуждения вопроса "Зачем?" считаю закрытым  Народ, по заданному вопросу кто-нибудь может что-то сказать или так и будем "дурью маятся"?  Кто-нибудь работал по такой технологии? Или хоть можете сказать какие скрытые проблемы могут возникнуть? | 
|  | 
|  31.08.2007, 17:26 | #8 | 
| Участник | Цитата:  Цитата: Цитата: Цитата: 
		
			Сообщение от Владимир Максимов
			   При этом, встает ряд чисто технических проблем по обмену информацией между этими компаниями. Некоторая часть информации должна "копироваться" из одной компании в другую, попутно порождая ряд взаимосвязанных документов. Связанных между компаниями. Здесь под "копированием" понимается не "тупое" копирование, а именно создание весьма специфических документов. В то время, как репликация - это именно "тупое" копирование с минимальной модификацией. Как решить эти проблемы через репликацию - не представляю. Или что подразумевается под термином "репликация"? Репликация где? На каком уровне? На это обсуждения вопроса "Зачем?" считаю закрытым  Цитата: Но как будут решаться такие проблемы, как блокировка на время обработки транзакции в "тяжёлых операциях" (закрытие склада, например) или одновременная блокировка одной таблицы пользователями из разных баз, даже предположить не могу. Да и объём трудозатрат по настройке и поддержания таких баз.... | 
|  | 
|  31.08.2007, 17:44 | #9 | 
| Участник | 
			
			Раз вы задали вопрос в теме про программирование, наверное вы будете развивать фукционал вашей системы. Программист, конечно будет писать решения в отдельной базе. Пусть он в своем коде добавил в таблицу новое поле. Вы можете себе привести последовательной действий при импорте такой модификации в рабочую базу?
		 | 
|  | 
|  31.08.2007, 17:54 | #10 | 
| Участник | Цитата: 
		
			Сообщение от petr
			   Раз вы задали вопрос в теме про программирование, наверное вы будете развивать фукционал вашей системы. Программист, конечно будет писать решения в отдельной базе. Пусть он в своем коде добавил в таблицу новое поле. Вы можете себе привести последовательной действий при импорте такой модификации в рабочую базу? Хотя, можно и программным - влезть в код синхронизации (Application.dbSynchronize) и перехватить процесс модификации структуры через прямое обращение к базе. В теории - решаемая проблема. | 
|  | 
|  31.08.2007, 17:56 | #11 | 
| Участник | 
			
			А выполнение запросов на linked серверах Вас не пугает? На маленьких объемах это приемлемо а на больших?
		 | 
|  | 
|  31.08.2007, 18:05 | #12 | 
| Участник | Цитата: Это форма для примера. Но в ряде случаев делается десяток, а то и сотня запросов (всякие методы find, например). И всё это через какой-то канал, несколько серверов, в другую базу... И для ВСЕХ таблиц! А таких методов, которые выискивают одну запись в таблице, вагон, -ведь авторы аксапты не предполагали такое её использование. | 
|  | 
|  31.08.2007, 18:45 | #13 | 
| Участник | Цитата: Вкратце: Нет. Не пугает. Хотя, конечно, практика покажет. План запросов показывает, что MS SQL работает достаточно интелектуально. Торможение, конечно, есть. По грубым оценкам, в случае объединения данных с разных Linked-серверов - в несколько раз. Возможно, на порядок. Но здесь есть предмет для оптимизации. Хотя опять же вне заданного вопроса. | 
|  | 
|  01.09.2007, 15:40 | #14 | 
| Модератор | Цитата: От пользователей? Есть домены От администраторов? Бесполезно, у них доступ будет всегда Непонятненько (с) Цитата: 
		
			Размер базы данных перевали за 200 ГБ.
		
	 Цитата: 
		
			Распределение базы данных позволит более гибко подойти к распределению нагрузки на сервера и выделению места под хранение.
		
	  Цитата: 
		
			На это обсуждения вопроса "Зачем?" считаю закрытым    Цитата: 
		
			Народ, по заданному вопросу кто-нибудь может что-то сказать или так и будем "дурью маятся"?    а) с производительностью (странно, правда?) б) трудоемкость сопровождения этого зоопарка вырастет ОЧЕНЬ сильно (одно лишь добавление поля в таблицу будет целым ритуалом, плюс обязательные проблемы с синхронизацией) в) целостность данных в случае чего восстанавливать будет непросто (у Вас же есть какой-то обмен между разными компаниями) Этого достаточно? Цитата: 
		
			Кто-нибудь работал по такой технологии? Или хоть можете сказать какие скрытые проблемы могут возникнуть?
		
	 А все почему? Потому что аналитик, уровень технической подготовки которого неизвестен, навязывает решение техническим специалистам Удачи. Она Вам потребуется 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | |
| За это сообщение автора поблагодарили: mazzy (5), ZVV (3), gl00mie (5). | |
|  01.09.2007, 18:06 | #15 | 
| NavAx | 
			
			Ребята, 200Гб базка всего то... повод заниматься оптимизацией и ежедневно присматривать за ней есть. НО... такой изврат мутить - никакого резона. Данная схема не является рекомендованной, более того, когда я ее показал сотрудникам MS - они выпучили глаза и покрутили пальцем у виска.   Попробовал на одной из своих баз, не особо крупной, всего чуть более 130гб. Падение производительности - 1-2 порядка на элементарных запросах. Вообщем вместо второго (третьего и далее) сервера бд поставьте нормальную дисковую подсистему и не морочьте голову. рекомендую IBM DS4700/DS4800 - их производительности для такой задачи более чем достаточно и от кого защищаетесь и чем такое решение поможет мне тоже жутко интересно   
				__________________ И все они создания природы... | 
|  | 
|  02.09.2007, 00:40 | #16 | 
| Участник | Цитата: Цитата: Сугубо из личного опыта: есть средства криптографической защиты, работающие прозрачно для приложений на уровне фильтров файловой системы. Они позволяют на лету надежно шифровать данные как на дисковых носителях, так и на всяких там стриммерах, и если сервер или резервную копию "унесут", то увидят лишь мусор. Но опять же надо хорошо проработать модель нарушителя, а то попадется какая-нить "паршивая овца", и все усилия пойдут прахом... | 
|  | 
|  02.09.2007, 03:45 | #17 | 
| Lean Six Sigma | 
			
			Хоть и жёстко человеку ответили, но правильно. Присоединяюсь. Вопросы масштабирования решаются аппаратными средствами. Можете сделать отдельный отчётный сервер. Писать транзакции одного типа в две разные базы смысла не имеет. По поводу защиты данных gl00mie сказал исчёрпывающе - пусть ваш аналитик сделает список угроз и выписывайте предложения по защите напротив угроз. Хотите защититься от разработчиков? Так у них отдельный сервер для разработки должен быть. Хотите не показывать информацию администраторам SQL? Тогда это не решение. В общем, единственное, чего можно добиться этим способом - падение быстродействия, увеличение нагрузки на сеть, повышение трудоёмкости администрирования и, возможно, программирования. Надеюсь, что аналитику задачу ставили не такую. | 
|  | 
|  03.09.2007, 10:59 | #18 | 
| Участник | 
			
			В общем, ответ большинства был ожидаемым. Как обычно, большинство вопроса вообще не прочитали. Поскольку, многие так и не поняли о чем же идет речь, повторю вопрос еще раз: Если вместо таблиц MS SQL "подсунуть" AXAPTA View - какие будут последствия и возможные проблемы со стороны AXAPTA. Я и сам могу написать большой трактат, что так делать нельзя, не стоит, не рекомендуется и т.д. и т.п. Но! Если Вам нечего сказать по существу вопроса, зачем Вы вообще что-то отвечаете? Чтобы разговор поддержать? Я не спрашиваю, какие есть альтернативы. Я спрашиваю, какие будут проблемы. Неужели так трудно понять о чем спрашивают-то? (...удалил пример, когда это "надо", поскольку не относится к сути вопроса...) Если Вы по такой схеме не работали, откуда такая уверенность, что так делать нельзя? Просто потому, что лично для Вас это кажется непривычным? Цитата: 
		
			Сообщение от Vadik
			
			 Проблем, лежащих на поверхности, столько, что скорее всего не буду и другим не советую. Цитата: 
		
			Сообщение от Lazy_Tiger
			
			 Попробовал на одной из своих баз, не особо крупной, всего чуть более 130гб. Падение производительности - 1-2 порядка на элементарных запросах. Последний раз редактировалось Владимир Максимов; 03.09.2007 в 12:37. Причина: Удалил пример, когда это "надо", поскольку не относится к сути вопроса | 
|  | 
|  03.09.2007, 11:29 | #19 | 
| Участник | 
			
			Касаемо проблем, думаю что косяпте абсолютно "по барабану" таблица там или вьюха, до тех пор, пока дело не коснется синхронизации таблиц и индексов.
		 | 
|  | 
|  03.09.2007, 11:50 | #20 | 
| Участник | Цитата:   | 
|  | 
| Теги | 
| faq, view, распределенная база данных | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| Невозможно выполнить команду языка определения данных в () | 8 | |||
| База данных в Axapta 3.0... | 13 | |||
| Обновление данных в View | 5 | |||
| Введение в Аксапту | 0 | |||
| 
 |