เราใช้ Google AppEngine เพื่อเรียกใช้แบบสอบถามเชิงพื้นที่ / แอตทริบิวต์และปัญหาหลัก (นับจากวันแรก) คือวิธีการจัดทำดัชนีชุดของเส้น / รูปหลายเหลี่ยมขนาดใหญ่โดยพลการ ข้อมูลชี้ไม่ยากเกินไป (ดูที่ geohash, geomodel และอื่น ๆ ) แต่ชุดของรูปหลายเหลี่ยมขนาดเล็ก / ขนาดใหญ่แบบสุ่มมักเป็นปัญหาเสมอ (และในบางกรณียังคงเป็น)
ฉันได้ลองใช้การสร้างดัชนีเชิงพื้นที่หลายรุ่นใน GAE แต่ส่วนใหญ่เป็นเพียงรูปแบบสองแบบด้านล่าง ไม่มีใครเร็วเท่ากับฐานข้อมูล SQL และทุกคนมีข้อดี / ข้อเสีย การแลกเปลี่ยนดูเหมือนจะสมเหตุสมผลสำหรับแอพการทำแผนที่บนอินเทอร์เน็ตเป็นส่วนใหญ่ นอกจากนี้ทั้งสองด้านล่างจะต้องเชื่อมโยงกับการเลือกรูปทรงเรขาคณิตในหน่วยความจำ (ผ่าน JTS และอื่น ๆ ) เพื่อลบคุณลักษณะใด ๆ ที่ไม่ตรงกับพารามิเตอร์การค้นหาขั้นสุดท้าย และในที่สุดพวกเขาก็ใช้คุณสมบัติเฉพาะของ GAE แต่ฉันแน่ใจว่ามันสามารถนำไปใช้กับสถาปัตยกรรมอื่น ๆ (หรือใช้ TyphoonAE เพื่อทำงานบนคลัสเตอร์ Linux, ec2 และอื่น ๆ )
กริด - จัดเก็บฟีเจอร์ทั้งหมดสำหรับบางพื้นที่ในดัชนีกริดที่รู้จัก วางดัชนีเชิงพื้นที่ขนาดเล็กลงบนกริดเพื่อให้คุณสำรวจชุดคุณสมบัติที่มีอยู่อย่างรวดเร็ว สำหรับข้อความค้นหาส่วนใหญ่คุณจะต้องดึงกริดจำนวนหนึ่งซึ่งรวดเร็วเนื่องจากคุณรู้แผนการตั้งชื่อกริดที่แน่นอนและความเกี่ยวข้องกับหน่วยงาน K / V (รับไม่ใช่แบบสอบถาม)
ข้อดี - เร็วสวยใช้งานง่ายไม่มีรอยเท้าหน่วยความจำ
ข้อด้อย - จำเป็นต้องมีการประมวลผลล่วงหน้าผู้ใช้จำเป็นต้องตัดสินใจขนาดของกริด, geoms ขนาดใหญ่จะถูกใช้ร่วมกันในหลายกริด, การจัดกลุ่มสามารถทำให้กริดกลายเป็นโอเวอร์โหลด, ค่าใช้จ่ายในการทำให้เป็นอนุกรม /
QuadKeys - นี่คือการใช้งานปัจจุบัน โดยพื้นฐานแล้วจะเหมือนกับกริดยกเว้นไม่มีระดับกริดที่ตั้งไว้ เมื่อมีการเพิ่มคุณสมบัติพวกมันจะถูกทำดัชนีโดยตาราง quadkey ที่มีขอบเขตทั้งหมด (หรือในบางกรณีแบ่งออกเป็นสองส่วนเมื่อไม่สามารถใช้ quadkey เดียวคิดว่าเป็นข้อมูล) หลังจากพบ qk แล้วแบ่งออกเป็นจำนวนสูงสุดของ qk ที่เล็กลงซึ่งให้การแสดงคุณลักษณะของธัญพืชที่ละเอียดยิ่งขึ้น ตัวชี้ / bbox ไปยังคุณลักษณะนั้นจะถูกบรรจุลงใน gridindex ที่มีน้ำหนักเบา (กลุ่มของคุณสมบัติ) ที่สามารถสอบถามได้ (การออกแบบดั้งเดิมสอบถามคุณสมบัติโดยตรง แต่สิ่งนี้พิสูจน์ได้ช้าเกินไป / CPU เข้มข้นในกรณีที่ resultset มีขนาดใหญ่)
Polykey Quadkeys http://www.arc2earth.com/images/help/GAE_QKS_1.png
รูปหลายเหลี่ยม Quadkeys http://www.arc2earth.com/images/help/GAE_QKS_2.png
อนุสัญญาการตั้งชื่อรูปสี่เหลี่ยมที่ใช้ด้านบนเป็นที่รู้จักกันดีและที่สำคัญกว่านั้นมีแนวโน้มที่จะรักษาสถานที่ (อธิบายเพิ่มเติมที่นี่ )
รูปหลายเหลี่ยมด้านบนมีลักษณะดังนี้: 0320101013123 03201010131212 03201010131213 0320101013132 03201010131313 ... 03201010131313 031310101313123
หากขอบเขตแบบสอบถามมีขนาดเล็กเพียงพอคุณสามารถดึงข้อมูลได้โดยตรงผ่าน qk สิ่งนี้ดีที่สุดเนื่องจากมีการเรียกแบตช์ rpc เพียงครั้งเดียวไปยังที่เก็บข้อมูล GAE หากขอบเขตมีขนาดใหญ่พอที่จะรวม qks ที่เป็นไปได้มากเกินไป (> 1,000) คุณสามารถเลือกใช้ตัวกรอง (เช่น: qk> = 0320101013 และ qk <= 0320101013 + \ ufffd) หลักการตั้งชื่อ quadkey บวกกับวิธีที่ GAE จัดทำดัชนีสตริงอนุญาตให้แบบสอบถามด้านบนดึงเฉพาะกริดที่มีอยู่ซึ่งอยู่ต่ำกว่าค่า qk นั้น
มีข้อแม้อื่น ๆ และปัญหาเพอร์เฟ็กต์ แต่โดยทั่วไปแล้วความสามารถในการสอบถามเกี่ยวกับ quadkeys ที่ทำให้เป็นไปได้
ตัวอย่าง - แบบสอบถามเกี่ยวกับมณฑลของสหรัฐอเมริกา: geojson
ข้อดี - เร็วมากไม่มีการกำหนดขนาดกริดไม่มีรอยความทรงจำไม่มีกริดที่แออัด
ข้อเสีย - จำเป็นต้องมีการประมวลผลล่วงหน้าสามารถโอเวอร์โฟทได้ในบางสถานการณ์ไม่มีข้อมูลแบบโพลาร์
Space Filling Curves - ดูที่การสืบค้น NextGen ของ Alfredที่ Google I / O ในปีนี้ การรวมของเส้นโค้งการเติมพื้นที่ / เวลาทั่วไปพร้อมกับตัวดำเนินการ MultiQuery ใหม่ (ทำงานแบบขนาน) จะช่วยให้มีการสืบค้นเชิงพื้นที่ที่น่าสนใจจริงๆ มันจะเอาชนะประสิทธิภาพ SQL ดั้งเดิมได้หรือไม่ ยากที่จะพูด แต่ควรปรับขนาดได้ดีจริงๆ และเรากำลังใกล้เข้ามาอย่างรวดเร็วในอนาคตซึ่งอุปกรณ์เคลื่อนที่ที่มีรูปร่าง / ขนาดทั้งหมดจะช่วยเพิ่มอัตราการเข้าชมเว็บไซต์ / บริการของคุณ
ในที่สุดฉันก็ยอมรับว่าคุณควรตรวจสอบโดเมนปัญหาของคุณอย่างใกล้ชิดก่อนที่จะเลือก NoSQL บน SQL ในกรณีของเราฉันชอบรูปแบบการกำหนดราคาของ GAE ดังนั้นจึงไม่มีทางเลือกจริง ๆ แต่ถ้าคุณไม่ต้องการปรับขนาดประหยัดเวลาด้วยตัวคุณเองและใช้เพียง sql db มาตรฐาน