2011-10-10 34 views
8

Tôi có một xml khá lớn (> 10mb trong kích thước & 40+ yếu tố). Hiện tại chúng tôi lưu trữ xml như vậy trong Oracle db và sử dụng xquery để truy vấn và truy xuất các phần của xml. Quá trình này diễn ra chậm và có nhiều cuộc gọi db. Chúng tôi đang khám phá mongodb để lưu trữ xml này và truy vấn nó. Tôi vừa chuyển đổi xml thành json và được nạp vào bộ sưu tập mongo và nó lưu trữ dữ liệu json lớn trong nháy mắt. Và nó lưu trữ các nút xml dưới dạng tài liệu lồng nhau. Nhưng khi tôi truy vấn (sử dụng tìm) cho một phần tử bên trong nhất, nó luôn trả về toàn bộ tài liệu, chứa các nút có giá trị phần tử không khớp. Tôi hy vọng chỉ có vài nút khớp với giá trị nút đã cho. Hãy cho tôi biết nếu có cách nào tốt nhất để lưu trữ các tệp xml lớn như vậy trong tệp tin mongo db. Và cũng cho tôi biết cách truy xuất các nút bên trong có các giá trị chính xác được chỉ định trong truy vấn. Cảm ơn trước.Lưu trữ XML lớn trong MongoDB

Trả lời

1

Đây là hành vi lọc tài liệu được nhúng nhiều cấp, thông thường bộ lọc phù hợp sẽ trả lại toàn bộ tài liệu chứ không phải tập con.

Kiểm tra câu trả lời của tôi cho mongodb-querying-array-elements-within-a-documenthow-to-find-the-matched-record-in-mongodb để biết thêm

Có thể bạn có thể thêm các lược đồ mẫu xml hiện bạn có, ai đó sẽ giúp bạn cấu trúc ứng dụng.

3

Có một số sự kiện, bạn nên lưu ý:

Số 1- MongoDB sẽ chỉ trả lại toàn bộ tài liệu tuỳ thuộc vào việc đạt hay không, không có tính năng quay trở lại chỉ một phần của nó (10 Tháng 10 năm 2011) và nếu bạn cần lọc, bạn phải triển khai nó bằng mã của riêng bạn.

Số 2- chú ý đến elemmatch từ khóa. Nó chỉ để tìm kiếm một số lần truy cập chỉ trong cùng một tài liệu phụ nhưng không phải là toàn bộ tài liệu, vì vậy bạn có thể bị nhầm lẫn ở đây.

Số 3 - không có chiến lược nào đúng để chia tổng hợp của bạn thành bộ sưu tập trong mongo so với RDBMS-s. Vì vậy, biểu diễn dữ liệu khác nhau có thể giải quyết trường hợp của bạn.

Số 4 - mặc dù số 3 nhận xét về "không đúng cách", có một khuyến nghị chung để giữ tài liệu của bạn ít hơn 10 MB kích thước

+0

Bạn có thể sử dụng các phép chiếu để lấy một phần tài liệu: https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/ –

10

Bạn đã từng nghĩ về việc thử Cơ sở dữ liệu XML cập nhật, chẳng hạn như BaseX (http://basex.org)? Nó có thể cung cấp cho bạn kết quả tốt hơn nhiều, đặc biệt nếu bạn đã sử dụng XQuery trước đó.

5

Tôi gặp vấn đề tương tự. Trong trường hợp của tôi, nút cấp cao nhất trong mỗi tệp XML luôn chứa một danh sách lớn các nút nhỏ hơn, vì vậy tôi đã lưu trữ các mục đó thay thế. Để làm điều đó, tôi đã viết công cụ dòng lệnh xml-to-json của riêng mình. Tôi đã sử dụng nó để chuyển đổi 10GB dữ liệu XML thành JSON, theo định dạng mà mongoimport có thể ăn.

Các vấn đề liên quan