Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Đưa tất cả các đối tượng python-rom vào danh sách

Có hai vấn đề với mã bạn đã cung cấp giải thích lý do tại sao bạn nhận được kết quả mà bạn nhận được.

Vấn đề đầu tiên là truy vấn của bạn test.query.filter(url ='.').all() sẽ trả về một danh sách trống. Thao tác này sẽ trả về một danh sách trống đơn giản vì bạn không có chỉ mục hợp lệ để được sử dụng với bộ lọc bạn đã chỉ định. Bạn có 2 chỉ mục cho cột đó - chỉ mục duy nhất (hữu ích để tìm kiếm url theo chuỗi chính xác) và chỉ mục hậu tố (hữu ích để tìm url kết thúc bằng một chuỗi nhất định) - nhưng cả hai đều không cung cấp khả năng lọc theo những gì sẽ là trong thế giới quan hệ một truy vấn 'like'. Chỉ mục tiền tố (được tạo bằng prefix=True ) sẽ cho phép bạn sử dụng test.query.like(url='*.') , nhưng điều đó sẽ rất chậm (nó quét chỉ mục thay vì tra cứu trực tiếp [1]).

Để giúp ngăn chặn các vấn đề liên quan đến chỉ mục / truy vấn như thế này, tôi đã thêm ngoại lệ QueryError khi người dùng cố gắng lọc dữ liệu của họ theo các chỉ mục không tồn tại. Tôi sẽ phát hành 0.31.4 muộn hơn một chút vào tối nay với những thay đổi đó.

Lỗi thứ hai mà bạn gặp phải, là nguyên nhân của ngoại lệ, là bạn gọi .count() mà không cần tranh luận. Tại điểm h.count() của bạn cuộc gọi, type(h) == list và các đối tượng danh sách Python yêu cầu một đối số để đếm các giá trị bằng đối số được cung cấp trong danh sách. Nếu bạn bỏ qua .all() phần truy vấn ban đầu của bạn, bạn sẽ lấy lại một đối tượng truy vấn. Đối tượng truy vấn đó có .count() và sẽ trả về một số kết quả phù hợp.

[1] Không phải tất cả các truy vấn 'thích' trong rom đều chậm, nhưng những truy vấn nhanh yêu cầu tiền tố không phải ký tự đại diện để giới hạn phạm vi dữ liệu để quét / lọc.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis mục danh sách Pop Theo số lượng mục

  2. Redis Out of Memory Exceptions, nhưng vẫn có nhiều bộ nhớ

  3. Rút ngắn UUID

  4. Redis làm gì khi hết bộ nhớ?

  5. Có thể đẩy thông báo không gian chính của redis lên luồng redis thay vì kênh pub / sub không