Tôi đang lên kế hoạch lưu trữ 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 mạnh mẽ tùy thuộc vào môi trường, nhưng tôi đang tìm kiếm thứ tự lớn của cường độ: Các truy vấn sẽ mất 5 ngày hoặc 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 duy nhất 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 các điểm dữ liệu được đặt hàng. 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 32 hoặc 64 bit ints hoặc floats.
Hệ thống máy chủ
|----------------+-------------------------------| | OS | Windows 2008 64-bit | | MySQL version | 5.5.24 [x86_64] | | CPU | 2x Xeon E5420 [8 cores total] | | RAM | 8GB | | SSD filesystem | 500 GiB | | HDD RAID | 12 TiB | |----------------+-------------------------------|
Có một số dịch vụ khác chạy trên máy chủ bằng thời gian xử lý không đáng kể.
Thống kê tập tin
|------------------+--------------| | number of files | ~16,000 | | total size | 1.3 TiB | | min size | 0 bytes | | max size | 12 GiB | | mean | 800 MiB | | median | 500 MiB | | total datapoints | ~200 billion | |------------------+--------------|
Tổng số dữ liệu là một ước tính rất thô.
Lược đồ đề xuất
Tôi đang lên kế hoạch thực hiện mọi thứ "đúng" [tức là bình thường hóa dữ liệu như điên] và do đó sẽ có bảng runs
, bảng spectra
có khóa ngoại cho runs
và bảng datapoints
có khóa nước 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í có thể 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ứ đúng đắn [đó 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ó hợp lý để xử lý việc này 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 nằm trong các yếu tố
|------------------+--------------| | number of files | ~16,000 | | total size | 1.3 TiB | | min size | 0 bytes | | max size | 12 GiB | | mean | 800 MiB | | median | 500 MiB | | total datapoints | ~200 billion | |------------------+--------------|0 nơi lưu trữ dữ liệu. Mỗi lần quét tạo ra> = 2 phần tử
|------------------+--------------| | number of files | ~16,000 | | total size | 1.3 TiB | | min size | 0 bytes | | max size | 12 GiB | | mean | 800 MiB | | median | 500 MiB | | total datapoints | ~200 billion | |------------------+--------------|1, được kết hợp với nhau, tạo thành một mảng 2 chiều [hoặc nhiều hơn] của mẫu
|------------------+--------------| | number of files | ~16,000 | | total size | 1.3 TiB | | min size | 0 bytes | | max size | 12 GiB | | mean | 800 MiB | | median | 500 MiB | | total datapoints | ~200 billion | |------------------+--------------|2.
Những dữ liệu này là viết-once, vì vậy hiệu suất cập nhậ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 lược đồ cơ sở dữ liệu là:
runs
Bảng
| column name | type | |-------------+-------------| | id | PRIMARY KEY | | start_time | TIMESTAMP | | name | VARCHAR | |-------------+-------------|
spectra
Bảng
| column name | type | |----------------+-------------| | id | PRIMARY KEY | | name | VARCHAR | | index | INT | | spectrum_type | INT | | representation | INT | | run_id | FOREIGN KEY | |----------------+-------------|
datapoints
Bảng
| column name | type | |-------------+-------------| | id | PRIMARY KEY | | spectrum_id | FOREIGN KEY | | mz | DOUBLE | | num_counts | DOUBLE | | index | 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 là nhà sinh vật học trong phòng thí nghiệm, vì vậy tôi không biết khoa học gần như các nhà khoa học thực tế.
Đây là một âm mưu của một phổ [quét] của loại dữ liệu mà tôi sẽ giao dịch:
Mục tiêu của phần mềm là tìm ra nơi 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 các tờ. Như bạn có thể thấy, phần lớn dữ liệu là không thú vị, nhưng chúng tôi không muốn loại bỏ dữ liệu có khả năng 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 nó sẽ đủ để lưu trữ các dữ liệu thô như một đốm màu 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 mỗi phổ, vì vậy các công cụ mở rộng điên rồ không nên là một vấn đề.
Tôi cần trợ giúp và tôi nhầm lẫn liệu MySQL có thể xử lý 10 tỷ hàng với 10-12 cột dữ liệu hay tôi nên tìm kiếm các cơ sở dữ liệu OpenSource khác như PostgreSQL, v.v.
Làm ơn cho tôi biết.
Gordon Linoff
1.2M53 Huy hiệu vàng607 Huy hiệu bạc754 Huy hiệu đồng53 gold badges607 silver badges754 bronze badges
Đã hỏi ngày 17 tháng 6 năm 2018 lúc 14:00Jun 17, 2018 at 14:00
4
Có, MySQL có thể xử lý 10 tỷ hàng. Khi bạn xác định ID trên các bảng lớn nhất, hãy sử dụng
|------------------+--------------| | number of files | ~16,000 | | total size | 1.3 TiB | | min size | 0 bytes | | max size | 12 GiB | | mean | 800 MiB | | median | 500 MiB | | total datapoints | ~200 billion | |------------------+--------------|6.
Tất nhiên, hiệu suất có tốt hay không phụ thuộc vào truy vấn của bạn. Để chèn cơ bản, cập nhật, xóa và chọn bằng chỉ mục, hiệu suất sẽ ổn - giả sử bạn có đủ bộ nhớ. Bạn cũng có thể muốn được phân vùng bảng của mình.
Nimantha
6.7246 huy hiệu vàng25 Huy hiệu bạc65 Huy hiệu Đồng6 gold badges25 silver badges65 bronze badges
Đã trả lời ngày 17 tháng 6 năm 2018 lúc 14:04Jun 17, 2018 at 14:04
Gordon Linoffgordon LinoffGordon Linoff
1.2M53 Huy hiệu vàng607 Huy hiệu bạc754 Huy hiệu đồng53 gold badges607 silver badges754 bronze badges
1