Tôi đang lên kế hoạch lưu trữ các bản quét từ máy quang phổ khối trong cơ sở dữ liệu MySQL và muốn biết liệu việc lưu trữ và phân tích lượng dữ liệu này có khả thi từ xa hay không. Tôi biết hiệu suất thay đổi tùy theo môi trường, nhưng tôi đang tìm kiếm thứ tự độ lớn: các truy vấn sẽ mất 5 ngày hay 5 mili giây?
định dạng đầu vào
Mỗi tệp đầu vào chứa một lần chạy của máy quang phổ; mỗi lần chạy bao gồm một tập hợp các lần quét và mỗi lần quét có một mảng dữ liệu theo thứ tự. Có một chút siêu dữ liệu, nhưng phần lớn tệp bao gồm các mảng ints 32 hoặc 64 bit hoặc float.
Hệ thống máy chủ
| ---------------- + ------------------------------- | | HĐH | Windows 2008 64-bit | | Phiên bản MySQL | 5.5.24 (x86_64) | | CPU | 2x Xeon E5420 (tổng cộng 8 lõi) | | RAM | 8GB | | Hệ thống tập tin SSD | 500 GiB | | RAID RAID | 12 TiB | | ---------------- + ------------------------------- |
Có một số dịch vụ khác đang chạy trên máy chủ sử dụng thời gian xử lý không đáng kể.
Thống kê tập tin
| ------------------ + -------------- | | số lượng tập tin | ~ 16.000 | | tổng kích thước | 1,3 TiB | | kích thước tối thiểu | 0 byte | | kích thước tối đa | 12 GiB | | nghĩa là | 800 MiB | | trung vị | 500 MiB | | tổng số điểm dữ liệu | ~ 200 tỷ | | ------------------ + -------------- |
Tổng số datapoint là một ước tính rất sơ bộ.
Lược đồ đề xuất
Tôi đang lên kế hoạch thực hiện những điều "đúng" (nghĩa là bình thường hóa dữ liệu như điên) và vì vậy sẽ có một runs
bảng, một spectra
bảng có khóa ngoại runs
và một datapoints
bảng có khóa ngoại spectra
.
Câu hỏi datapoint 200 tỷ
Tôi sẽ phân tích trên nhiều quang phổ và thậm chí nhiều lần chạy, dẫn đến các truy vấn có thể chạm vào hàng triệu hàng. Giả sử tôi lập chỉ mục mọi thứ một cách chính xác (đó là một chủ đề cho một câu hỏi khác) và không cố gắng xáo trộn hàng trăm MiB trên mạng, liệu MySQL có thể xử lý vấn đề này từ xa không?
thông tin bổ sung
Dữ liệu quét sẽ đến từ các tệp ở định dạng mzML dựa trên XML
. Thịt của định dạng này là trong các
<binaryDataArrayList>
yếu tố nơi dữ liệu được lưu trữ. Mỗi lần quét tạo ra> = 2 <binaryDataArray>
phần tử, được ghép lại với nhau, tạo thành một mảng 2 chiều (hoặc nhiều hơn) của biểu mẫu [[123.456, 234.567, ...], ...]
.
Những dữ liệu này là ghi một lần, vì vậy cập nhật hiệu suất và an toàn giao dịch không phải là mối quan tâm.
Kế hoạch ngây thơ của tôi cho một lược đồ cơ sở dữ liệu là:
runs
bàn
| tên cột | loại | | ------------- + ------------- | | id | KHÓA CHÍNH | | bắt đầu | THỜI GIAN | | tên | VARCHAR | | ------------- + ------------- |
spectra
bàn
| tên cột | loại | | ---------------- + ------------- | | id | KHÓA CHÍNH | | tên | VARCHAR | | chỉ số | INT | | phổ_type | INT | | đại diện | INT | | run_id | KHOẢN NGOẠI TỆ | | ---------------- + ------------- |
datapoints
bàn
| tên cột | loại | | ------------- + ------------- | | id | KHÓA CHÍNH | | phổ_id | KHOẢN NGOẠI TỆ | | mz | NHÂN ĐÔI | | số lượng | NHÂN ĐÔI | | chỉ số | INT | | ------------- + ------------- |
Điều này có hợp lý không?
Vì vậy, như bạn có thể đã suy luận, tôi là lập trình viên, không phải nhà sinh vật học trong phòng thí nghiệm, vì vậy tôi không biết về khoa học cũng như các nhà khoa học thực tế.
Đây là một âm mưu của một phổ (quét) loại dữ liệu mà tôi sẽ xử lý:
Mục tiêu của phần mềm là tìm ra vị trí và mức độ quan trọng của các đỉnh. Chúng tôi sử dụng gói phần mềm độc quyền để tìm ra điều này ngay bây giờ, nhưng chúng tôi muốn viết chương trình phân tích của riêng mình (bằng R) để chúng tôi biết cái quái gì đang diễn ra dưới tờ. Như bạn có thể thấy, phần lớn dữ liệu không thú vị, nhưng chúng tôi không muốn loại bỏ dữ liệu hữu ích mà thuật toán của chúng tôi đã bỏ lỡ. Khi chúng tôi có một danh sách các đỉnh có thể xảy ra mà chúng tôi hài lòng, phần còn lại của đường ống sẽ sử dụng danh sách đỉnh đó thay vì danh sách dữ liệu thô. Tôi cho rằng sẽ đủ để lưu trữ các điểm dữ liệu thô dưới dạng một đốm lớn, vì vậy chúng có thể được phân tích lại nếu cần, nhưng chỉ giữ các đỉnh như các mục cơ sở dữ liệu riêng biệt. Trong trường hợp đó, sẽ chỉ có vài chục đỉnh trên mỗi phổ, vì vậy các công cụ chia tỷ lệ điên rồ không nên '