Hướng dẫn can mysql store millions of records? - mysql có thể lưu trữ hàng triệu bản ghi không?

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:

Hướng dẫn can mysql store millions of records? - mysql có thể lưu trữ hàng triệu bản ghi không?

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.

Hướng dẫn can mysql store millions of records? - mysql có thể lưu trữ hàng triệu bản ghi không?

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

MySQL có thể xử lý 1 triệu hồ sơ không?

MySQL có thể xử lý 100 triệu hồ sơ không? Vâng, nó có thể xử lý hàng tỷ hồ sơ. Nếu bạn lập chỉ mục đúng các bảng, chúng phù hợp với bộ nhớ và các truy vấn của bạn được viết đúng thì nó không phải là một vấn đề.Yeah, it can handle billions of records. If you properly index tables, they fit in memory and your queries are written properly then it shouldn't be an issue.

MySQL có thể lưu trữ bao nhiêu hồ sơ?

Biểu diễn bên trong của bảng MySQL có giới hạn kích thước hàng tối đa là 65.535 byte, ngay cả khi công cụ lưu trữ có khả năng hỗ trợ các hàng lớn hơn.Các cột Blob và văn bản chỉ đóng góp 9 đến 12 byte vào giới hạn kích thước hàng vì nội dung của chúng được lưu trữ riêng biệt với phần còn lại của hàng.65,535 bytes, even if the storage engine is capable of supporting larger rows. BLOB and TEXT columns only contribute 9 to 12 bytes toward the row size limit because their contents are stored separately from the rest of the row.

MySQL có thể lưu trữ hàng tỷ hồ sơ không?

Lưu trữ một tỷ hồ sơ không phải là vấn đề lớn đối với MySQL.Hãy tiếp tục lưu trữ dữ liệu của bạn.Để cung cấp cho bạn một ý tưởng về khả năng MySQL, tôi đang chia sẻ một ảnh chụp nhanh về dự án của mình.Nó chèn khoảng 43 triệu trong 7 bảng mỗi ngày.. Go ahead do do store your data. To give you an idea of MySQL capability, I am sharing a snapshot of my project. It inserts around 43 million in 7 tables everyday.

MySQL có phù hợp với dữ liệu lớn không?

MySQL không được thiết kế để chạy các truy vấn phức tạp đối với khối lượng dữ liệu lớn (đòi hỏi phải khủng hoảng thông qua rất nhiều dữ liệu trên quy mô lớn).Trình tối ưu hóa MySQL khá hạn chế, thực hiện một truy vấn tại một thời điểm bằng một luồng. (which requires crunching through a lot of data on a huge scale). MySQL optimizer is quite limited, executing a single query at a time using a single thread.