5

Từ blog appengine:Làm cách nào để appengine thực hiện truy vấn trên danh sách một cách hiệu quả?

Lập kế hoạch truy vấn nâng cao - Chúng tôi đang loại bỏ nhu cầu phát triển chỉ mục và giảm yêu cầu chỉ mục tùy chỉnh cho nhiều truy vấn. SDK sẽ đề xuất các chỉ mục tốt hơn trong một số trường hợp và một bài viết sắp tới sẽ mô tả những gì có thể tối ưu hơn nữa.

Là một thử nghiệm, tôi có một thực thể trong appengine mà có một listProperty

class Entity(db.Model): 
    tags = db.StringListProperty() 

Tôi có 500.000 đơn vị, một nửa trong số họ có thẻ = [ '1'], và nửa còn lại có thẻ = [ '2']

truy vấn của tôi là

SELECT FROM Entity WHERE tags='1' and tags='2' 

Nó trả về không có kết quả thực sự nhanh chóng. Kế hoạch là nó sử dụng để đạt được điều này? Danh sách được lập chỉ mục để đạt được điều này như thế nào? Trong những ngày cũ, một chỉ số bùng nổ sẽ là cần thiết.

+0

IIRC điều này được đề cập trong một trong các cuộc đàm phán công nghệ - nó không bao giờ yêu cầu chỉ mục bùng nổ, chỉ là một StringListProperty – bdonlan

+1

Không có thay đổi lập kế hoạch truy vấn nâng cao nào sẽ ảnh hưởng đến truy vấn này. Bạn đã chèn các thực thể như thế nào? Nếu tất cả các thẻ có thẻ = 2 có ID cao hơn các thẻ có thẻ = 1 (hoặc ngược lại), truy vấn này là không đáng kể để thỏa mãn. –

+0

Tôi nghĩ rằng truy vấn có nghĩa là: CHỌN TỪ ĐỐI TƯỢNG WHERE tags = '1' và thẻ = '2' ORDER BY ngày – Jaap

Trả lời

2

Thuật toán được sử dụng trong nội bộ ('hợp nhất tham gia') được mô tả trong bài nói chuyện công nghệ cao I/O 2009 của Google Building Scalable, Complex Apps on App Engine. Chức năng này cũng đã có sẵn kể từ khi khởi chạy GAE; các 'chỉ số bùng nổ' chỉ xảy ra nếu bạn tạo một chỉ mục phức hợp của nhiều StringListProperties. Cần lưu ý rằng chức năng này thực sự chung chung hơn một chút so với bạn có thể nhận ra - bất kỳ sự kết hợp nào của nhiều bộ lọc bình đẳng trên bất kỳ sự kết hợp tùy ý nào có thể được thỏa mãn mà không có bất kỳ chỉ số hợp chất nào không có thứ tự sắp xếp. Họ không phải tất cả là từ một StringListProperty, và thậm chí có thể được chia trên nhiều StringListProperty.

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