2012-01-25 29 views
8

Tôi đang phát triển một gói phần mềm mô phỏng Monte Carlo liên quan đến nhiều vật lý và mô phỏng. Tôi cần phân tích trực tuyến, theo dõi sự phụ thuộc của dữ liệu có nguồn gốc trên dữ liệu thô và thực hiện các truy vấn như "cung cấp cho tôi dạng sóng cho nhiệt độ> 400 và vị trí gần (x0, y0)". Vì vậy, mô hình dữ liệu trong bộ nhớ khá phức tạp.Độ bền dữ liệu của dữ liệu mô phỏng khoa học, Mongodb + HDF5?

Ứng dụng được viết bằng Python, với mỗi kết quả mô phỏng được mô phỏng như một đối tượng Python. Trong mỗi giờ nó tạo ra ~ 100 kết quả (đối tượng). Hầu hết các đối tượng có dữ liệu nặng (vài MB của mảng số nhị phân), cũng như một số dữ liệu ánh sáng (nhiệt độ, vị trí, vv). Tổng tỷ lệ tạo dữ liệu là vài GB mỗi giờ.

Tôi cần một số giải pháp bảo mật dữ liệu và API truy vấn dễ sử dụng. Tôi đã quyết định lưu trữ dữ liệu nặng (mảng số) trong bộ nhớ HDF5. Tôi đang xem xét việc sử dụng MongoDB như đối với sự kiên trì đối tượng (chỉ dữ liệu ánh sáng) và để lập chỉ mục dữ liệu nặng trong HDF5. Tính bền vững đối tượng với MongoDB rất đơn giản và giao diện truy vấn trông đủ mạnh mẽ.

Tôi biết tùy chọn sqlalchemy + sqlite. Tuy nhiên, việc truyền tải dữ liệu nặng tới HDF5 dường như không được hỗ trợ một cách tự nhiên trong SqlAlchemy, và một lược đồ cố định là cồng kềnh.

Tôi biết bài đăng này ( Searching a HDF5 dataset), nhưng "bảng chỉ mục" chính nó cần một số chỉ mục trong bộ nhớ để truy vấn nhanh.

Tôi tự hỏi liệu có bất kỳ giải pháp thay thế nào mà tôi nên xem xét trước khi tôi tham gia không? Hoặc là có bất kỳ vấn đề tôi đã bỏ qua trong kế hoạch của tôi?

TIA.

Trả lời

0

Bạn đã xem Vistrails chưa?

+0

Cảm ơn rất nhiều cho con trỏ. Tôi lướt qua tài liệu Vistrails. Ấn tượng mà tôi có là VisTrail hoàn hảo cho việc xử lý sau và tạo đồ thị. Tôi đoán đơn đăng ký của tôi cụ thể hơn cho một vấn đề và cần –

+0

để ẩn nhiều chi tiết phân tích từ người dùng. Tôi đang đọc mã nguồn của nó và xem cách dữ liệu được lưu trữ trong VisTrail, hy vọng tôi có thể học được điều gì đó từ họ. VisTrail là một phần mềm ấn tượng, tôi ước tôi có nó như một sinh viên tốt nghiệp. Cảm ơn bạn. –

3

Một số điều cần biết về Mongo mà có thể có liên quan đến tình hình bạn mô tả và lý do tại sao nó có thể là một sự phù hợp tốt:

tôi cần phải làm phân tích trực tuyến, theo dõi những sự phụ thuộc của dữ liệu thu được trên nguyên dữ liệu và thực hiện các truy vấn như "cung cấp cho tôi dạng sóng cho nhiệt độ> 400 và vị trí gần (x0, y0)".

Mongo có ngôn ngữ truy vấn linh hoạt giúp dễ dàng thực hiện các truy vấn như thế này. Chỉ số không gian địa lý (2D) cũng được hỗ trợ - cộng với nếu bạn cần truy vấn về vị trí và nhiệt độ rất thường xuyên, bạn có thể tạo chỉ mục phức hợp (nhiệt độ, vị trí) và điều này sẽ đảm bảo rằng truy vấn sẽ luôn hoạt động tốt.

Hầu hết các đối tượng có dữ liệu nặng (vài MB mảng số nhị phân), cũng như một số dữ liệu ánh sáng (nhiệt độ, vị trí, v.v.).

Mỗi tài liệu trong MongoDB có thể chứa tối đa 16MB dữ liệu và loại trường nhị phân cũng được hỗ trợ - do đó sẽ tương đối đơn giản để nhúng một vài megs nhị phân vào một trường và truy xuất nó bằng cách truy vấn khác các trường trong dữ liệu. Nếu bạn mong muốn cần nhiều hơn 16MB, bạn cũng có thể sử dụng API GridFS của mongodb, cho phép bạn lưu trữ các khối dữ liệu nhị phân tùy ý lớn trên đĩa và truy xuất chúng nhanh chóng.

Tổng tỷ lệ tạo dữ liệu là vài GB mỗi giờ.

Đối với bộ dữ liệu lớn, đang phát triển nhanh như thế này, bạn có thể tạo thiết lập được phân bổ sẽ cho phép bạn thêm máy chủ để chứa kích thước cho dù có lớn bao nhiêu.

+0

Chúng tôi cần HDF5 cho các tính năng đẹp của việc lưu trữ mảng số, ví dụ: chunking, IO một phần, hỗ trợ MPI, lossy và lossless compression, vv. Chúng tôi dự định sử dụng HDF5 làm lưu trữ vĩnh viễn, tương đối cố định lược đồ, trong khi sử dụng Mongodb làm chỉ mục khi ứng dụng chạy. Thuật toán thống kê trong ứng dụng có thể thay đổi thường xuyên, vì vậy chúng tôi sẽ xây dựng lại chỉ mục Mongodb từ lưu trữ HDF5 mỗi lược đồ thời gian có thay đổi đáng kể. –

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