xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Пробуя базы данных XML


Автор Сообщение
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[10606] Вс Ноя 19, 2006 09:43
Пробуя базы данных XML
Заметки по ходу дела.

Sedna -- это база данных для XML. Увидев, что есть PHP-интерфейс, попробовал было поиграться. Увы, на хостинге (virtual private server) ей не хватает памяти, поэтому пришлось отложить в сторону до лучших времён.
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[10607] Вс Ноя 19, 2006 09:52

Вообще, мне нужно было что-то простое, просто собрать все XML в кучу, проиндексировать и делать потом выборки. Скорее всего, что-то типа Berkeley DB XML от Sleepycat (после поглощения -- от Oracle). Но это дорогой коммерческий продукт, хоть и прикрывается листочком open source и free software.

Вот, нашёл, жалобу. Заодно решил перечитать всё обсуждение.
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[10613] Пн Ноя 20, 2006 04:12

olpa писал(а):

Вообще, мне нужно было что-то простое, просто собрать все XML в кучу, проиндексировать и делать потом выборки.


На сколько критично бістродействие?
Может достаточно будет обойтись набором файлов в каталоге и обычной утилитой исполняющей XQuery (Saxon например) или просто XPath?
Структуру дерева XML можно легко перенести на структуру файловой системы. Данные о файлах и уникальных индексах можно при этом хранить в реляционной базе данных (это в случае разбивания дерева на поддеревья).
Очевидным недостатком такого подхода будет превращение простых XPath запросов в огромные пограммы с неоднократными вызовами SQL и обращениям к файловой системе.
А вообще прежде чем чтото рекомендовать было бы не плохо узнать что за проэкт и что за запросы...
_________________
развлекайся и ни в чём себе не отказывай...
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[10616] Пн Ноя 20, 2006 08:09

Цитата:

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


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

Цитата:

На сколько критично бістродействие?


Как только я решил, что сайт будет read-only, быстродействие стало некритичным. Буду собирать на локальной машине и выкладывать на сервер.

Цитата:

Данные о файлах и уникальных индексах можно при этом хранить в реляционной базе данных (это в случае разбивания дерева на поддеревья).
Очевидным недостатком такого подхода будет превращение простых XPath запросов в огромные пограммы с неоднократными вызовами SQL и обращениям к файловой системе.


Это, оказывается, фигня. Серьёзные проблемы возникли, когда я стал придумывать админку для работы с базой. Когда я понял, что на админку уйдёт слишком много сил, тогда-то я и решил наконец попробовать прирождённую РЯМБД.

В итоге решил сделать всё исключительно на файлах. Вот описание того, что будет.

Используется база на основе файлов.

Есть главный файл, который с помощью XInclude содержит все остальные файлы. После добавления или изменения какого-то файла X, я запускаю умный скрипт.

Умный скрипт лезет в главный файл и смотрит, есть ли там XInclude-запись для X. Если нет -- добавляет. Заодно считывает какие-нибудь настройки.

Затем скрипт обновляет файл X:
* расставляет, где надо, идентификаторы;
* добавляет или обновляет автоматические поля, типа даты создания или изменения записи.

Потом скрипт создаёт список объектов, которые зависят от X, и сохраняет их в файле X.stale.

На втором этапе работает другой скрипт. Он находит все stale-файлы, считывает список устаревших объектов, и пересобирает их. При успешном завершении stale-файлы удаляются.

Всё, база обновлена. Остаётся только пересоздать, где надо, HTML-ки из XML и выложить их на сервер.
1024
Гость




[10631] Вт Ноя 21, 2006 16:03

Ну так что там с производительсностью у седны? Если она ниже чем у аксеса то зачем это вообще применять? Или может есть какие-то другие разработки?
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[10634] Вт Ноя 21, 2006 18:15

Вот недавно скачал одно из альтернативных решений с http://www.scylla-charybdis.com/download/xml2sql-v.tgz
Пока не проверял, но смотрел код. Думаю переписать его без использования libxml, а так же модифицировать и дополнить. Попытаюсь написать на основе его конвертер XPath->SQL и сравнить с Седной. Тогда вопрос о производительности и эффектвности будет снят.
_________________
развлекайся и ни в чём себе не отказывай...
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[10641] Ср Ноя 22, 2006 10:32

Цитата:

Ну так что там с производительсностью у седны?


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

Цитата:

то зачем это вообще применять?


Цитата:

конвертер XPath->SQL


Положить XML в реляционную базу данных можно без проблем. Сложности возникают, когда с этим надо как-то работать. Тяжелее всего обеспечить ссылочную целостность. Предположим, документ А ссылается на документ Б. Далее, я экспортировал Б из базы, подправил пару параграфов и вернул его в базу. Как гарантировать, что ссылка из А в Б по-прежнему корректна?

Нет, конечно, всё это можно сделать. Но получается, что если не использовать РЯМБД, то в итоге напишешь свою недоделанную РЯМБД с кучей багов. Лучше уж сразу сделать всё правильно.

// РЯМБД == XMLDB
1024
Гость




[10655] Пт Ноя 24, 2006 21:34

в стандарте хмл вообще ничего не упоминается про ссылочную целостность. Так же она отсутствует и в седне
Sergiy
Аспирант

Зарегистрирован: 19.02.2005
Сообщения: 225
Откуда: Киев
Посетить сайт автора
[10661] Сб Ноя 25, 2006 21:19

В стандарте есть индексные атрибуты (уникальные) и атрибуты, принимающие те же значения(указатели).
Для простоты понимания возьмём проэкт, состоящий исключительно из XML файов. Его легко можно вместить в один XML файл, распихав по тегам, допустим file и dir. В каждом таком элементе прописать атрибут @id с уникальным значением, желательно это должен быть путь к файлу. Валидатор должен проверять, допустим значения выражения a[@class='local']/@href и сопоставлять с @id и выводить список ошибок в виде a[@class='local']/@href[not boolean(key(.))]
Переименование файла автоматически должно сопровождатся изменением ссылок на него(наю как это можно сделать на XSLT).
Вот я это и понимаю под ссылочной целостностю. Но реализовать это на реальной файловой системе попроблематичней. Даже в Sedna ипользовать document() и collection() не так уодбноно, чем хранить всё в пределах одного документа.
[offtop]
Уже несколько дней собрать Седну не получается Sad... Забить на неё чтоли?
[/offtop]
_________________
развлекайся и ни в чём себе не отказывай...
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[10749] Вт Дек 05, 2006 08:28

Цитата:

Вот я это и понимаю под ссылочной целостностью.


Да, примерно так.

Цитата:

Нет, конечно, всё это можно сделать. Но получается, что если не использовать РЯМБД, то в итоге напишешь свою недоделанную РЯМБД с кучей багов. Лучше уж сразу сделать всё правильно.


Заметил, что Michael Kay написал почти то же самое:

Цитата:

I think if you don't start of by using a database, there's a good chance that you will end up in effect writing your own. I'd go for an XML DB.

Sedna team
Гость




[10780] Пн Дек 11, 2006 12:31

Писать свою DBMS для XML - это конечно смелый ход...

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

А с Седной не возобновляли попыток? Ее можно настроить, чтобы она ела меньше памяти (при запуске базы указываете минимальное количество буфферов). А если возникнут трудности - пишите нам, мы поможем.

Sedna team
Pavel Velikhov
Новичок

Зарегистрирован: 11.12.2006
Сообщения: 1

[10781] Пн Дек 11, 2006 13:01

Sergiy писал(а):


[offtop]
Уже несколько дней собрать Седну не получается Sad... Забить на неё чтоли?
[/offtop]



А на какой платформе? Забивать не надо, пишите на modis@ipsras.ru лучше.
Sedna team
admin
Администратор

Зарегистрирован: 01.01.2001
Сообщения: 101

Посетить сайт автора
[10788] Вт Дек 12, 2006 05:53

Привет Sedna team!

Цитата:

Писать свою DBMS для XML - это конечно смелый ход


Это да. Но поскольку объём позволяет хранить весь объём информации в одном файле, это не так страшно.

Цитата:

А с Седной не возобновляли попыток? Ее можно настроить, чтобы она ела меньше памяти (при запуске базы указываете минимальное количество буфферов).


Нет. Я тут подумал, я бы ещё Oracle попробовал поставить на VPS (вид хостинга). Вот доживу до collocation, тогда можно будет ещё разок попробовать.