Tôi không hiểu sự khác biệt giữa ADD và SET Bất kỳ manh mối nào? Có vẻ như ADD bao gồm SET hoặc ADD trả về false nếu có gì đó và SET chỉ ghi đè. Cảm ơn!
EDIT: Câu hỏi cụ thể của tôi là "Khi nào bạn sử dụng add thay vì set hay set thay vì add?"
Tôi không hiểu sự khác biệt giữa ADD và SET Bất kỳ manh mối nào? Có vẻ như ADD bao gồm SET hoặc ADD trả về false nếu có gì đó và SET chỉ ghi đè. Cảm ơn!
EDIT: Câu hỏi cụ thể của tôi là "Khi nào bạn sử dụng add thay vì set hay set thay vì add?"
Câu trả lời:
Bạn đã có khá nhiều câu trả lời cho câu hỏi đầu tiên của bạn: mục đích của ADD
nó là chỉ hoạt động khi một khóa chưa tồn tại, trong khi đó SET
là để cập nhật giá trị, bất kể nó đã tồn tại chưa. Nếu bạn quen thuộc với SQL, thì nó (đại khái) giống như sự khác biệt giữa INSERT
các truy vấn ( ADD
) và UPDATE
( SET
).
Liên quan đến câu hỏi phụ lục của bạn, bạn sẽ sử dụng bất kỳ câu hỏi nào phù hợp với mục đích của bạn. Tôi sẽ nói rằng đó SET
sẽ là hoạt động phổ biến hơn, bởi vì nó phổ biến hơn mà bạn chỉ muốn nói "Tôi muốn chìa khóa foo
có giá trị bar
, và tôi không quan tâm liệu nó đã có trong đó hay chưa". Tuy nhiên, sẽ có những dịp (ít thường xuyên hơn) khi cần phải biết rằng một khóa chưa có trong bộ đệm.
Một ví dụ xuất hiện trong đầu khi ADD
thích hợp là lưu trữ các phiên trong memcache (nhân tiện, tôi không khuyến nghị) - nếu bạn tạo ngẫu nhiên ID phiên của mình (hoặc thông qua băm), bạn sẽ không muốn để tạo một phiên mới có cùng khóa với phiên hiện có, vì điều này sẽ cấp cho một người dùng quyền truy cập vào dữ liệu của người dùng khác. Trong trường hợp này, khi bạn tạo phiên bạn sẽ sử dụng ADD
và nếu nó trả về trạng thái lỗi, bạn sẽ cần tạo ID phiên mới và thử lại. Tất nhiên, cập nhật phiên sẽ sử dụng SET
khi người dùng làm việc theo cách của họ thông qua ứng dụng của bạn.
REPLACE
thậm chí không phải là SQL ... đó là "ngôn ngữ được lấy cảm hứng từ SQL mà MySQL hiểu" (cười)
Ngoài câu trả lời ở trên bởi id người dùng 'womble', vui lòng xem xét các điểm sau:
Khả năng của một điều kiện cuộc đua với 'bộ' trái ngược với 'thêm'. Xem bên dưới liên kết đến một câu trả lời của Nick Johnson: /programming/13234556/USE-memcache-add-instead-of-set
Nếu bạn biết 'thêm' sẽ làm, thì đừng sử dụng 'set'. Điều này là để tránh gửi dữ liệu qua mạng vì đây là các cuộc gọi RPC . Và thực tế gần như toàn bộ thời gian được sử dụng bởi lưu lượng truy cập mạng thay vì tìm kiếm cặp khóa-giá trị trong memcache. Vì vậy, nếu bạn có thể tránh lưu lượng mạng tốt nhất vì trong trường hợp đó, thời gian phản hồi của bạn sẽ nhanh hơn.
Xem Appstats ( https://developers.google.com/appengine/docs/python/tools/appstats (của Google)) và để hiểu thêm về điểm số 2 ở trên, vui lòng xem http://www.youtube.com/watch ? v = bvp7CuBWVgA của Guido Van Rossum (@Google)