2012-02-22 3 views
-1

У меня есть поле в базе данных, которое является XML, потому что оно представляет класс, который используется в C#/VB.Net. Проблема заключается в том, что после первоначальной манипуляции большинство, но не все, манипуляции выполняются в SQL Server. Это означает, что поле XML преобразуется «на лету».Быстрое преобразование XML в SQL Server - преобразование в таблицы?

Поскольку мы получаем больше полей и больше записей, эта операция замедляется. Я думаю, что замедление - это преобразование всех этих полей в другие типы данных.

Так, чтобы ускорить это, я думал несколько способов:

Есть набор таблиц, которые представляют различные части данных XML. Я бы сделал эти таблицы только для чтения, используя триггер для Insert/Update, который отклонил бы любые изменения. Моя «главная» таблица с XML в ней, когда она обновляет XML, отключит триггеры, обновит таблицы новыми значениями и снова включит триггеры.

Единственная реальная причина, по которой мы используем XML, состоит в том, что очень легко преобразовать его в класс в C#/VB.Net. Но я получаю точку, в которой я могу написать рутину, которая будет принимать все биты и части и преобразовать ее в класс, а также функцию, которая будет идти другим путем (класс -> таблицы).

Может ли кто-нибудь дать какие-либо идеи относительно лучшего способа сделать это? Я не привязан к идее использования структуры XML. Я обеспокоен тем, что у нас есть отдельные таблицы для ускорения обработки SQL, а кто-то меняет значение поля в этой таблице, мы должны убедиться, что XML обновлен. Или не позволяйте человеку обновлять его.

TIA - Jeff.

+2

Представление класса C# само по себе не является особенно веской причиной использования XML вместо реляционных таблиц. –

+0

Если вы манипулируете представлением класса в sql, это уже не надежное представление и, следовательно, полная потеря пространства. Прекратите возиться, признайте, что вы «ошиблись», выровняйте xml, загрузите сам класс из данных таблицы. –

ответ

0

Какова цель объектов, которые вы сохраняете? Если что-то иное, чем постоянство государства, вы не делаете себе никаких пристрастий, и вы не отвлекаете внимание. Если они являются постоянством состояния, то, как минимум, делают столбцы из свойств и полей (могут включать частные, если вы оставляете внутренний метод для установки значений при восстановлении).

0

Не считая мудрости того, что вы делаете, вы можете задуматься о создании индекса XML. Это должно помочь вам приступить к работе: http://msdn.microsoft.com/en-us/library/ms345121%28v=sql.90%29.aspx

Основная идея состоит в том, что правый индекс может «предварительно отбросить» ваш XML и автоматически построить класс таблиц, которые вы собираетесь делать «вручную». Недостатком является то, что это может действительно взорвать ваши требования к хранению, если вы храните много XML.

+0

Я думаю, мне придется преобразовать его в таблицы вместо этого. – user1226859

+0

Я думаю, что реальная проблема заключается в том, когда я вытягиваю записи, которые он имеет для «unxml» таблицы XML. Там очень много вещей, которые нам нужны часто, поэтому мы тратим много времени на вызов представления, которое его преобразует. Я предполагаю, что там, где я все время теряю. – user1226859

+0

XML-индекс может пред-unxml столбца XML для вас. Связанная мной статья объясняет это довольно хорошо. Если вы получаете доступ к XML через представление, вы можете перехитрить механизм SQL и сделать что-то хуже? – Andrew