2013-06-17 33 views
6

Sử dụng Titan w/Cassandra v 0.3.1, tôi đã tạo chỉ mục khóa đỉnh qua createKeyIndex như được mô tả trong Titan docs.Tìm kiếm Titan trên khóa được lập chỉ mục là cực kỳ chậm?

gremlin> g.createKeyIndex("my_key", Vertex.class) 
==>null 

bây giờ tôi có appx 50k nút và 186k ​​cạnh trong đồ thị, và tôi đang tìm kiếm một sự khác biệt hiệu suất đáng kể giữa tra cứu bằng my_key. Truy vấn này mất khoảng 5 giây để chạy:

gremlin> g.V.has("my_key", "abc") 
==>v[12345] 

trong khi sử dụng ID index mất ít hơn 1 giây:

gremlin> g.v(12345) 
==>v[12345] 

my_key không có một hạn chế duy nhất (tôi không muốn), nhưng tôi tự hỏi điều gì gây ra sự khác biệt trong hiệu suất. Làm cách nào để tăng hiệu suất trên tra cứu cho khóa đỉnh không được lập chỉ mục?

Trả lời

5

Vấn đề ở đây là việc sử dụng .has, là chức năng lọc và sẽ không sử dụng bất kỳ chỉ mục nào. Từ GremlinDocs:

Điều đáng chú ý là cú pháp của has cũng tương tự như g.V("name", "marko"), trong đó có sự khác biệt trở thành một tra cứu chỉ số quan trọng và như như vậy sẽ thực hiện nhanh hơn. Ngược lại, dòng này, g.V.has("name", "marko"), sẽ lặp qua tất cả các đỉnh kiểm tra thuộc tính tên của mỗi đỉnh cho một kết quả phù hợp và sẽ chậm hơn đáng kể so với phương pháp chỉ mục chính .

Đối với ví dụ ở trên, điều này sẽ sử dụng các chỉ số và thực hiện việc tra cứu rất nhanh chóng (< 1 giây):

gremlin> g.V("my_key", "abc") 
==>v[12345] 
+2

Đây không phải là chính xác như của Titan 0.5.0: 'gVhas (" my_key "," abc ")' bây giờ sẽ sử dụng một chỉ mục có sẵn trên khóa 'my_key'. Xem [tài liệu chỉ mục] của Titan (http://s3.thinkaurelius.com/docs/titan/current/indexes.html). – AliOli

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