Tôi đã được giao nhiệm vụ triển khai một giải pháp (ứng dụng và db) để lưu trữ các mẫu dữ liệu từ một mảng cảm biến khổng lồ. Mảng hiện bao gồm khoảng 20.000 cảm biến, nhưng sẽ sớm phát triển, lên tới 100.000 cảm biến. Mỗi cảm biến gửi một mẫu dữ liệu cứ sau 10 giây và mỗi mẫu có kích thước 28 byte.
Làm các khoản tiền do đó dẫn đến:
- 8640 mẫu mỗi cảm biến mỗi ngày
- 242kB dữ liệu mỗi cảm biến mỗi ngày
- 864 triệu mẫu mỗi ngày
Bây giờ tôi đã tự hỏi cách tốt nhất để lưu trữ / truy xuất dữ liệu là gì? Tôi đã "tham gia" dự án này sau khi phần mềm đã được chỉ định, vì vậy nó cần được triển khai trên Nền tảng Windows bằng SQL Server.
Giải pháp hiện tại trong đầu tôi là tạo một DB với hai bảng để lưu trữ các mẫu dữ liệu. Cái đầu tiên đóng vai trò là một loại chỉ mục thành cái thứ hai lưu trữ các mẫu đối chiếu trong trường nhị phân trên cơ sở mỗi ngày trên mỗi cảm biến:
Table 1:
RecordID - BigInt - Identity
SensorID - BigInt - Primary Key
Date - DateTime - Primary Key (yyyy-mm-dd)
Table 2:
RecordID - BigInt - Primary Key (from an insert into Table 1)
Data - Binary
Về cơ bản tôi sẽ viết các mẫu từ tất cả các cảm biến thành các tệp tạm thời (1 cho mỗi cảm biến). Vào cuối mỗi ngày, sau đó tôi sẽ tạo một mục trong Bảng 1, sử dụng RecordID được tạo và kết xuất tệp vào trường Dữ liệu trong Bảng 2.
Bằng cách này, tôi kết thúc với chỉ 100.000 mục vào bảng mỗi ngày, thay vì 864 triệu mục. Dữ liệu phải có sẵn trên mạng LAN hoặc mạng tốc độ cao, do đó, việc truy xuất dữ liệu cảm biến trên cơ sở cả ngày sẽ được chấp nhận.
Mặc dù tất cả dữ liệu phải được lưu trữ, nhưng hầu hết dữ liệu có thể sẽ không bao giờ được đọc. Vì vậy, số lượng đọc trên (các) bảng sẽ không nhiều hơn so với viết.
Tôi biết rằng tôi có thể thực hiện một cái gì đó bằng cách sử dụng hệ thống tệp bằng cách chỉ lưu trữ đường dẫn đến tệp dữ liệu, nhưng tôi đọc rằng SQL Server vượt trội so với NTFS trong khi các trường nhị phân của bạn ít hơn 256kB. (Một vùng màu xám tồn tại giữa 256kB và 1MB, trong khi NTFS vượt xa SQL Server về kích thước nhị phân> 1 MB).
Tôi cũng hơi cảnh giác khi lưu trữ dữ liệu từ 100.000 cảm biến vào các tệp của riêng mình mà không gây ra sự cố trong hệ thống tệp bằng cách có một lượng lớn tệp trong một thư mục hoặc bằng cách có cấu trúc cây phức tạp với một vài tệp trong mỗi thư mục, trong khi không thậm chí lấy phân mảnh tập tin vào tài khoản.
Bất cứ ai có thể cung cấp cho tôi một số lời khuyên / ý kiến thiết thực ở trên?
Có những cạm bẫy rõ ràng mà tôi sẽ rơi vào?
Dữ liệu mẫu không nén khá độc đáo. Một tệp 242 kB nén xuống khoảng 85kB. Tuy nhiên tôi có thể thực hiện một số loại nén ở cấp cơ sở dữ liệu để dữ liệu mẫu (cột) được nén tự động không?
SQL Server rõ ràng là một lựa chọn sai cho dự án này?
Thiết kế của hai bảng có phải là khôn ngoan không, hay tôi có thể kết hợp nó thành một bảng duy nhất vẫn sẽ là "biểu diễn" như hai bảng không?