2011-01-12 2 views
8

Я очень рад новым Mysql XMl Functions.Выполнение функций MySql Xml?

Теперь я могу вставить что-то вроде «объектно-ориентированных» документов в мою реляционную базу данных oldschool.

Для примера используйте случай использования пользователя, который поет на вашем сайте, используя подключение к facebook. Вы можете получить объект для пользователя, используя график api, и получить приятную информацию. Однако эта информация может значительно варьироваться. Некоторые поля могут быть или не быть установлены, некоторые из них могут быть добавлены с течением времени и так далее.

Хорошо, если вы просто заинтересованы в особых полях (например, отношения друзей, пол, фильмы ...), вы можете проецировать их в свою реляционную схему базы данных.

Однако, используя функции XMl, вы можете сохранить весь объект внутри поля, а затем ваши различные модели могут получить доступ к данным с помощью функции ExtractValue. Вы можете хранить все сразу, не беспокоясь о том, что вам понадобится позже.

Но какова будет производительность?

Например, у меня есть таблица с 50 000 записей, которые представляют пользователей. У меня есть поле перечислимую, что государства "male", "female "(или различных других полов, чтобы быть политически корректным).

на производительность, например, выборка всех мужчин будет очень быстро.

  • Но что о чем-то вроде WHERE ExtractValue(userdata, '/gender/') = 'male'?

  • Как производительность измениться, если объект становится все больше?

  • Могу ли я каким-то образом Maby положить индекс на Удельный ed xpath?

  • Как типы полей работают вместе с этими функциями/характеристиками. Varchar/клякса?

  • Нужны ли полнотекстовые индексы?

Подводя итог мой вопрос:

Mysql XML functins выглядеть великолепно. И я уверен, что они действительно великолепны, если вы просто хотите хранить структурированные данные, которые вы получаете и анализируете далее в своем приложении.

Но как они будут сражаться в процедурах, где на них выполняются внутренние проверки/сортировка/сравнение/расчеты?

Может ли Mysql заменить документы, ориентированные на базы данных, такие как CouchDB/Sesame?

Каковы преимущества и компромиссы функций XML?

Как и почему они лучше/хуже, чем динамическое приложение, которое хранит различные данные в качестве атрибутов?

Например, таблица ключей/значений с ключом xpath как ключ и значение как значение, связанное с объектом документа.

Кто-нибудь сделал какие-либо другие впечатления или заметил что-то упоминаемое?

+0

Я все еще полностью раздутый, что они существуют в первую очередь. Когда я увидел вашу ссылку, я подумал, что это была шутка из старых шуток april :) –

+0

утешительный факт, что даже вы все не знаете;) –

+0

Я на самом деле не так уж хорош в mySQL за пределами того, что нужно веб-разработчику каждый день. Я все еще в тупике о том, как * I * стал пользователем # 6 в теге :) –

ответ

1

Я склоняюсь к комментариям, похожим на Pekka's, но я думаю, что причина, по которой мы не можем смеяться, это ваше утверждение: «Эта информация, однако, может сильно варьироваться». Это означает, что нереалистично планировать анализ всего этого и проецировать его в базу данных.

Я не могу ответить на все ваши вопросы, но я могу ответить на некоторые из них.

В особенности я не могу сказать вам о производительности в MySQL. Я видел это в SQL Server, протестировал его и обнаружил, что SQL Server выполняет в памяти очень редко, вне зависимости от размера файла XML, мне казалось, что он читает с диска, но это немного преувеличение. Другие могут оспаривать это, но это то, что я нашел.

«Может ли Mysql заменить документы, ориентированные на базы данных, такие как CouchDB/Sesame?» Этот вопрос немного широк, но в вашем случае использование MySQL позволяет сохранить соответствие ACID для этих фрагментов XML, если вы используете InnoDB, что нельзя сказать автоматически для некоторых из этих баз данных, ориентированных на документы.

«Как и почему они лучше/хуже, чем динамическое приложение, которое хранит различные данные в качестве атрибутов?» Я думаю, что это действительно вопрос стиля. Вам предоставляются XML-фрагменты, которые (предположительно) документированы, и MySQL может их перемещать. Если вы просто сохраните их как таковые, вы сохраните шаг. Что можно было бы получить, превратив их в нечто другое?

Документы MySQL предлагают, чтобы XML-файл перешел в поле clob. Производительность может пострадать в больших документах. Возможно, тогда вы определите поддокументы, которые вы хотите регулярно вырывать и помещать в детскую таблицу.

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

Жаль, что я могу сказать больше, надеюсь, что это поможет.

Смежные вопросы