Re: 2Gb XML compare
От: sereda Россия http://igorsereda.moikrug.ru
Дата: 29.09.04 13:18
Оценка: 7 (2)
Здравствуйте, Dimas Owl, Вы писали:

DO>Задача сравнить два XML файла. Размеры каждого порядка 2гиг.

DO>структура
DO><root>
DO><doc>
DO><field name="p1"><[!CDATE[ejfghkenx]]></fiels>
DO>...
DO><field name="p30"></field>
DO></doc>
DO></root>

DO>сравнение по всем полям.


DO>Одно из полей уникальное с типом int! для каждого <doc>, но сама XML не отсортирована по этому полю.


DO>Короче

DO>1, нужна идея вообще.
DO>2, может есть мысли как отсортировать в промежуточный файл?


На мой взгляд, единственный разумный способ таков — отсортировать, как Вы верно написали, в промежуточный файл используя линейный алгоритм сортировки — он возможен поскольку у Вас есть уникальное поле типа int. Потом уже идти по двум отсортированным файлам и сравнивать записи. Итого все это займет большое, но линейное время.

Линейную сортировку можно сделать, например, вот так (bucket sort):
1. Создаете 256 временных файлов.
2. Читаете ваши <doc> по порядку и смотрите на младший байт в ID (то самое поле int).
3. Записываете <doc> в соответствующий файл.
4. Пройдя весь исходный файл, сливаете все временные файлы — сначала все <doc> и нулевого, потом из первого, и т.д.
5. Повторяете ту же операцию для 2-го, 3-го и 4-го байта в ID, в порядке увеличения значимости.

Вуаля — отсортированный файл.


-------------------
Игорь Середа
ALMWorks
http://almworks.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.