2011-08-10 17 views
10

Otrzymuję dane XML z usługi. Dane testowe, które otrzymuję, mają około 300 węzłów XML, zdecydowanie za dużo, aby utworzyć pojedyncze wiersze w bazie danych MySQL.Najlepszy sposób na przechowywanie danych XML w bazie danych MySQL, z określonymi wymaganiami

Problem polega na tym, że najlepiej jest przechowywać dane wszystkie i prawdopodobnie będziemy musieli ponownie odwołać się do danych w pewnym momencie w przyszłości - nie możemy po prostu przetworzyć tego przez jeden raz i usunąć ciąg znaków XML .

Jaki jest najlepszy sposób przechowywania tych danych w bazie danych MySQL?

Mam prognozę, że przy przewidywanym tempie w ciągu kilku miesięcy, jeśli będziemy przechowywać surowe dane XML w formacie TEXT, baza danych może wzrosnąć do około 500 MB. Na dłuższą metę jest to niepraktyczne.

Odpowiedz

14

Można utworzyć kolumnę blob (tj. mediumtext). Zamiast wstawiać XML w postaci ciągów w DB, możesz spakować XML, a następnie zapisać w MySQL.

Kiedy czytasz z MySQL, rozpakowujesz go ponownie. Ponieważ XML jest tekstem, uzyskasz bardzo wysoki współczynnik kompresji (kompresja blisko 80%). Proces myślowy polega na tym, że dysk IO zajmuje dużo więcej czasu niż kompresja/un-kompresja, która jest głównie związana z procesorem.

Minusem jest was nie będzie już w stanie zapytać, czy wyszukiwanie pełnotekstowe za pomocą SQL ....

+0

Dzięki @Srikar, uważam, że to rozwiązanie dokładnie pasuje do moich wymagań. Potrzebuję tylko przechowywać dokument XML w DB dla przyszłego odniesienia, żadne zapytania nie będą dokonywane na zapisanym dokumencie XML. Moja jedyna troska była z biegiem czasu, pojemność przechowywania plików xml może znacznie wzrosnąć. W tym celu skompresuję pliki przed zapisaniem w DB. – Anuruddha

2

Najlepszym sposobem jest nie przechowywać XML w DB, ale mam historię z tym konkretnym problemem.

Po prostu zapisz jako TEKST. 500 MB nie jest niczym w przypadku MySql, szczególnie w przypadku typów danych TEXT, ponieważ nie są one przechowywane w buforze wierszy.

4

spróbuj użyć polecenia LOAD XML. To oświadczenie jest dostępne w MySQL 5.5.

3

Wiele zależy od tego, co chcesz zrobić z danymi - jeśli chcesz wyszukiwać rzeczy w XML, wtedy decomposing it into a tree zapewni znacznie lepszą wydajność zapytań.

500 MB nie jest ogromną ilością danych - chodzi tylko o to, jak się do niej odwołujesz i przeszukujesz. Jeśli jest to tylko do celów archiwizacji lub nigdy nie musisz szukać wewnątrz kodu XML, wówczas skompresowanie (np.) Kodowania base64 zmniejszy to do mniej niż 80Mb

Powiązane problemy