10

Tôi cần lưu trữ biểu đồ không bị động và lớn trong ứng dụng google, cách tốt nhất để làm điều này là gì? Biểu diễn biểu đồ phải có khả năng hỗ trợ nhanh chóng kéo ra một tập hợp các đỉnh (để hiển thị trên trang) và tất cả các liên kết từ một đỉnh cụ thể và đường dẫn trên biểu đồ (mặc dù đường dẫn tối ưu không thực sự cần thiết, chỉ cần khá tốt)Lưu trữ biểu đồ được hướng dẫn trong kho dữ liệu google appengine

Suy nghĩ của tôi về chủ đề: Cách rõ ràng nhất là có mô hình đỉnh và mô hình cạnh tham chiếu hai đỉnh, tuy nhiên có vẻ như nó sẽ kết thúc bằng rất nhiều truy vấn cho mọi hoạt động, tôi tự hỏi nếu có cách nào tốt hơn (có thể xây dựng thông tin liên kết vào mỗi đỉnh bằng cách nào đó)

Trả lời

8

Dưới đây là cách đơn giản nhất:

class Vertex(db.Model): 
    outedges = db.ListProperty(db.Key) 
    # Other information about the vertex here 

Bây giờ bạn có thể khám phá các đồ thị mà không cần bất cứ thắc mắc gì cả - chỉ cần gọi db.get trên 1 hoặc nhiều phím để lấy các đỉnh có liên quan:

# Get the first referenced vertex 
vertex2 = db.get(vertex1.outedges[0]) 

# Get all referenced vertices 
vertices = db.get(vertex1.outedges) 
0

Xem xét bạn đang sử dụng công cụ ứng dụng của Google. :

Một cho các đỉnh, một cho các liên kết từ một đỉnh (như bạn đã nói) và một bổ sung mà các đường dẫn đã được precomputed.

GAE hoạt động tốt nhất nếu thông tin bạn lưu trữ không được chuẩn hóa, do đó bạn không phải thực hiện bất kỳ phép tính nào trên đó.

+0

Vấn đề là, biểu đồ là động, tính toán lại tất cả những thay đổi đường dẫn đó sẽ tốn rất nhiều hạn ngạch của tôi – Martin

2

Tùy thuộc vào số lượng đỉnh/liên kết mà bạn có thể muốn chỉ sử dụng danh sách thay vì tạo một nhóm các thực thể mới. Kiểm tra các vấn đề về đồ thị của bạn bè được mô tả trong phần thứ hai của video này từ Google IO 2009: http://www.youtube.com/watch?v=AgaL6NGpkB8

Nếu bạn nghĩ số đỉnh là đủ cao, bạn chỉ có thể tạo mô hình Vertex với danh sách đại diện cho kết nối.

Các vấn đề liên quan