Lý lịch
Một cơ sở dữ liệu cục bộ chứa gần 1,3 tỷ hàng duy nhất. Mỗi hàng được liên kết gián tiếp với một vĩ độ và kinh độ cụ thể (vị trí). Mỗi hàng có một dấu ngày.
Ca sử dụng
Vấn đề như sau:
- Người dùng đặt ngày bắt đầu / ngày kết thúc và một phạm vi các giá trị (ví dụ: 100 đến 105).
- Hệ thống tập hợp tất cả các hàng khớp với ngày đã cho, được nhóm theo vị trí.
- Hệ thống thực hiện xác định các vị trí, trong những ngày đó, có khả năng thống kê rơi vào phạm vi giá trị nhất định.
- Hệ thống hiển thị tất cả các vị trí phù hợp với người dùng.
Đây là một vấn đề về tốc độ và quy mô.
Câu hỏi
Kiến trúc giải pháp ít tốn kém nhất bạn có thể tưởng tượng sẽ cho phép một hệ thống như vậy lấy kết quả cho người dùng trong vòng năm giây là gì?
Hệ thống hiện tại
Môi trường hiện tại là:
- PostgreQuery 8.4 (có thể nâng cấp; chuyển đổi cơ sở dữ liệu không phải là một tùy chọn)
- R và PL / R
- XFS
- WD VelociRaptor
- RAM 8 GB (Corsair G.Skill; 1,3 GHz)
- Lõi lõi tứ chính hãng 7 (2,8 GHz)
- Ubuntu 10.10
Nâng cấp phần cứng được chấp nhận.
Cập nhật - Cấu trúc cơ sở dữ liệu
Hàng tỷ hàng nằm trong một bảng giống như:
id | taken | location_id | category | value1 | value2 | value3
- id - Khóa chính
- lấy - Ngày được chỉ định cho hàng
- location_id - Tham chiếu đến vĩ độ / kinh độ
- thể loại - Mô tả dữ liệu
- value1 .. 3 - Các giá trị khác mà người dùng có thể truy vấn
Các taken
cột thường ngày liên tiếp mỗi location_id
, đôi khi mỗi địa điểm có dữ liệu 1800-2010 (khoảng 77.000 ngày, nhiều trong số họ đôi khi mỗi vị trí có dữ liệu trong phạm vi ngày giống nhau).
Có bảy loại và các bảng đã được phân chia theo thể loại (sử dụng bảng con). Mỗi danh mục chứa ~ 190 triệu hàng. Trong tương lai gần, số lượng hàng trên mỗi danh mục sẽ vượt quá một tỷ.
Có khoảng 20.000 địa điểm và 70.000 thành phố. Các vị trí tương quan với thành phố theo vĩ độ và kinh độ. Chỉ định từng vị trí cho một thành phố cụ thể có nghĩa là tìm ranh giới của thành phố, đây không phải là một nhiệm vụ tầm thường.
Ý tưởng
Một số ý tưởng tôi có bao gồm:
- Tìm một dịch vụ đám mây để lưu trữ cơ sở dữ liệu.
- Tạo một sọc đột kích SSD (video tuyệt vời).
- Tạo một bảng kết hợp tất cả các vị trí theo thành phố (tính toán trước).
Cảm ơn bạn!