Chúng tôi sử dụng Google AppEngine để chạy các truy vấn không gian / thuộc tính và vấn đề chính (từ ngày đầu tiên) là làm thế nào để lập chỉ mục các tập hợp lớn các dòng / đa giác có kích thước tùy ý. Dữ liệu điểm không quá khó (xem geohash, geomodel, v.v.) nhưng các tập hợp đa giác nhỏ / lớn được phân cụm ngẫu nhiên luôn là một vấn đề (và trong một số trường hợp, vẫn còn)
Tôi đã thử một số phiên bản khác nhau của lập chỉ mục không gian trên GAE nhưng hầu hết chỉ là các biến thể của hai bên dưới. Không có gì nhanh như cơ sở dữ liệu SQL và tất cả đều có ưu / nhược điểm. sự đánh đổi có vẻ hợp lý cho hầu hết các ứng dụng bản đồ dựa trên internet. Ngoài ra, hai cái bên dưới cần được kết hợp với loại bỏ hình học trong bộ nhớ (thông qua JTS, v.v.) để loại bỏ bất kỳ tính năng nào không phù hợp với các tham số tìm kiếm cuối cùng. và cuối cùng, họ dựa vào các tính năng cụ thể của GAE nhưng tôi chắc chắn rằng nó có thể được áp dụng cho các kiến trúc khác (hoặc sử dụng TyphoonAE để chạy trên cụm linux, ec2, v.v.)
Lưới - Đóng gói tất cả các tính năng cho một khu vực nhất định vào một chỉ mục lưới đã biết. Đặt một chỉ mục không gian nhỏ trên lưới để bạn nhanh chóng điều hướng tập hợp các tính năng mà nó chứa. Đối với hầu hết các truy vấn, bạn sẽ chỉ cần kéo một số lưới nhanh, vì bạn biết quy ước đặt tên lưới chính xác và cách nó liên quan đến các thực thể K / V (được, không phải truy vấn)
Ưu điểm - khá nhanh, dễ thực hiện, không có dấu chân bộ nhớ.
Nhược điểm - tiền xử lý cần thiết, người dùng cần quyết định kích thước lưới, các địa chất lớn được chia sẻ trên một số lưới, việc phân cụm có thể khiến lưới bị quá tải, chi phí tuần tự hóa / giải tuần tự có thể là một vấn đề (ngay cả khi được nén qua bộ đệm giao thức)
QuadKeys - Đây là triển khai hiện tại. về cơ bản nó giống như Grids ngoại trừ không có mức lưới đặt. khi các tính năng được thêm vào, chúng được lập chỉ mục bởi lưới tứ giác chứa hoàn toàn giới hạn của chúng (hoặc trong một số trường hợp, được chia thành hai khi không thể sử dụng một tứ giác đơn lẻ, hãy nghĩ về đường dữ liệu). Sau khi tìm thấy qk, sau đó nó được chia thành một số lượng tối đa qk nhỏ hơn cung cấp các biểu diễn hạt mịn hơn của tính năng. một con trỏ / bbox cho tính năng đó sau đó được đóng gói vào một lưới lưới nhẹ (nhóm tính năng) có thể được truy vấn (một thiết kế ban đầu đã truy vấn các tính năng trực tiếp nhưng điều này tỏ ra quá chậm / tốn nhiều CPU trong trường hợp bộ kết quả lớn)
Polyline Quadkeys http://www.arc2earth.com/images/help/GAE_QKS_1.png
Polygon Quadkeys http://www.arc2earth.com/images/help/GAE_QKS_2.png
Quy ước đặt tên tứ giác được sử dụng ở trên là nổi tiếng và quan trọng hơn, có xu hướng bảo tồn địa phương (mô tả thêm ở đây )
Đa giác trên hình đa giác ở trên trông giống như thế này: 03201010101010101
nếu giới hạn truy vấn đủ nhỏ, bạn có thể tìm nạp trực tiếp qua qk. điều này là tối ưu vì nó chỉ là một cuộc gọi rpc hàng loạt duy nhất đến datatore GAE. nếu giới hạn đủ lớn để bao gồm quá nhiều qks có thể (> 1000) thì bạn có thể truy vấn thay thế bằng bộ lọc (ví dụ: qk> = 0320101013 và qk <= 0320101013 + \ ufffd). Quy ước đặt tên tứ giác cộng với cách chuỗi chỉ mục GAE cho phép truy vấn ở trên chỉ tìm nạp các lưới hiện có nằm dưới giá trị qk đó.
Có những vấn đề khác và hoàn hảo, nhưng nói chung, khả năng truy vấn trên các tứ giác làm cho nó khả thi
ví dụ - truy vấn về các quận của Hoa Kỳ: Geojson
Ưu điểm - khá nhanh, không có cấu hình kích thước lưới, không có dấu chân bộ nhớ, không có lưới quá đông
Nhược điểm - tiền xử lý cần thiết, có thể tải quá mức trong một số trường hợp, không có dữ liệu cực
Đường cong lấp đầy không gian - Hãy xem cuộc trò chuyện NextGen Queries của Alfred tại Google I / O năm nay. Việc bao gồm các đường cong điền không gian / thời gian chung cùng với các toán tử MultiQuery mới (chạy song song) sẽ cho phép một số truy vấn không gian thực sự thú vị. Nó sẽ đánh bại hiệu năng SQL truyền thống? Khó nói nhưng nên mở rộng quy mô thực sự tốt. Và chúng tôi đang nhanh chóng tiếp cận một tương lai nơi các thiết bị di động luôn có đủ hình dạng / kích cỡ sẽ tăng lưu lượng truy cập đến trang web / dịch vụ của bạn một cách đáng kể.
cuối cùng, tôi cũng đồng ý rằng bạn nên xem xét kỹ về miền vấn đề của mình trước khi chọn NoQuery qua SQL. Trong trường hợp của chúng tôi, tôi thực sự thích mô hình định giá của GAE vì vậy thực sự không có lựa chọn nào nhưng nếu bạn không cần phải mở rộng quy mô, hãy tiết kiệm thời gian và chỉ cần sử dụng db sql tiêu chuẩn