Tôi đang trong quá trình thiết kế một hệ thống mới cho một tập dữ liệu không gian địa lý lớn sẽ yêu cầu hiệu năng truy vấn đọc nhanh. Do đó, tôi muốn xem liệu có ai nghĩ là có thể hoặc có kinh nghiệm / lời khuyên về các DBMS phù hợp, cấu trúc dữ liệu hoặc các phương pháp thay thế để đạt được hiệu suất cần thiết trong tình huống sau:
Dữ liệu sẽ liên tục được sản xuất từ dữ liệu radar vệ tinh được xử lý, có phạm vi phủ sóng toàn cầu. Dựa trên độ phân giải vệ tinh và vùng phủ sóng trên toàn cầu, tôi ước tính toàn bộ dữ liệu được thiết lập để tạo ra các giá trị tại 75 tỷ vị trí riêng biệt trên toàn cầu. Trong vòng đời của một vệ tinh, đầu ra sẽ tạo ra tới 300 giá trị tại mỗi vị trí này (do đó tổng số dữ liệu> 22 nghìn tỷ giá trị). Đây là cho một vệ tinh, và đã có một quỹ đạo thứ hai, với hai vệ tinh khác được lên kế hoạch trong vài năm mới. Vì vậy, sẽ có rất nhiều dữ liệu! Một mục dữ liệu duy nhất rất đơn giản và sẽ chỉ bao gồm (kinh độ, vĩ độ, giá trị), nhưng do số lượng mục tôi ước tính một vệ tinh duy nhất tạo ra tối đa 100TB.
Dữ liệu bằng văn bản không bao giờ cần cập nhật, vì nó sẽ chỉ phát triển khi việc mua lại vệ tinh mới được xử lý. Hiệu suất viết không quan trọng, nhưng hiệu suất đọc là rất quan trọng. Mục tiêu của dự án này là có thể trực quan hóa dữ liệu thông qua một giao diện đơn giản như một lớp trên bản đồ google, trong đó mỗi điểm có một giá trị màu dựa trên mức trung bình, độ dốc hoặc một số chức năng theo thời gian. (bản demo ở cuối bài).
Từ các yêu cầu này, cơ sở dữ liệu cần có khả năng mở rộng và chúng tôi có khả năng hướng tới các giải pháp đám mây. Hệ thống cần có khả năng xử lý các truy vấn không gian địa lý như "điểm gần (lat, lon)" và "điểm trong (hộp)" và có hiệu suất đọc <1s để xác định vị trí một điểm và đa giác có chứa tới 50.000 điểm (mặc dù lên đến 200.000 điểm sẽ thích hợp hơn).
Cho đến nay tôi có một bộ dữ liệu thử nghiệm gồm ~ 750 triệu mục dữ liệu tại 111 triệu vị trí. Tôi đã dùng thử một ví dụ postgres / postGIS, hoạt động tốt, nhưng không có khả năng ngăn chặn Tôi không làm điều này sẽ có thể đối phó khi dữ liệu phát triển. Tôi cũng đã dùng thử một ví dụ mongoDB, một lần nữa xuất hiện để OK xa và với shending, nó có thể đủ để mở rộng theo khối lượng dữ liệu. Gần đây tôi đã tìm hiểu một chút về elaticsearch, vì vậy mọi bình luận về điều này sẽ hữu ích vì nó mới đối với tôi.
Dưới đây là hình ảnh động nhanh về những gì chúng tôi muốn đạt được với bộ dữ liệu đầy đủ:
Gif này (từ bản dùng thử postgres của tôi) đang phục vụ (6x3) gạch raster được tính toán trước, mỗi viên chứa ~ 200.000 điểm và mất ~ 17 giây để tạo ra mỗi viên. Bằng cách nhấp vào một điểm, biểu đồ được tạo bằng cách kéo tất cả các giá trị lịch sử tại vị trí gần nhất trong <1s.
Xin lỗi cho bài viết dài, tất cả các ý kiến / lời khuyên đều được chào đón.