- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我知道我可以用普通集作为参数 ( Redis: How to intersect a "normal" set with a sorted set? ) 来做一个 zinterstore。这会影响性能吗?它会比仅使用 zset 更快/更慢吗?
câu trả lời hay nhất
theosorted-set source code , ZINTERSTORE
会将集合视为得分为 1 的有序集合,函数名称为 zunionInterGenericCommand。
相交集将花费更多或更少的时间,具体取决于此步骤中使用的排序算法,例如:
/* sort sets from the smallest to largest, this will improve our
* algorithm's performance */
qsort(src,setnum,sizeof(zsetopsrc),zuiCompareByCardinality);
Sets 和 Zsets 的存储方式也有差异,这将影响它们的读取方式。 Redis 将根据它们包含的元素数量来决定如何对(排序的)Set 进行编码。因此迭代它们需要不同的工作。
然而,出于任何实际目的,我认为最好的选择是使用 ZINTERSTORE
,我将解释原因:我几乎看不出您在源代码中编写的任何东西会如何胜过Redis 在做你想做的路口时的性能。
如果您关心的是性能,那说明您在细节上做得太多了。您的重点应该放在操作的大 O 上,如命令 tài liệu 所示。 :
Time complexity: O(NK)+O(Mlog(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.
这告诉你的是:1-较小集合的大小和您计划相交的集合数量决定了第一部分。因此,如果您知道您将始终与两组相交,一组较小,另一组较大;那么你可以说第一部分是不变的。一个很好的例子是将商店中所有可用产品的集合(分数是库存中的数量)与用户购物车中的一组排序产品相交。
在这种情况下,您只有 2 套,而且您会知道其中一套非常小。
2-生成的排序集 M 的大小可能会导致很大的性能问题。但是这里有一个技巧:大的排序集合在太大时被编码为跳跃列表。一个小的排序集将存储为一个 zip 列表,这可能会在大的排序集中引起重要的命中。
但是,对于交集的情况,您知道结果集不能大于您提供的较小集。对于并集,结果集将包含所有集合中的所有元素;因此需要更多地关注较大集合的大小,而不是最小集合的大小。
总而言之,(排序的)集合的性能问题的答案是:它取决于集合的大小,而不是实际数据类型。考虑到生成的数据结构将是一个有序集合,而不管所有输入都是集合。因此,一个大的排序集将被存储(效率较低)作为一个跳跃列表。
事先了解您计划相交的集合数量(2、3,取决于用户输入?)和较小集合的大小(10?数百?数千?)会给您比内部数据类型更好的想法。两种类型的相交算法相同。
关于performance - 当两个输入集之一是正常集时,zinterstore 会更快/更慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39468717/
Đã thử sử dụng trình chỉnh sửa biểu mẫu được tích hợp vào QTCreator nhưng ngay cả khi tôi đặt plugin vào QtCreator.app/Contents/MacOS/designer thì nó cũng không hiển thị. Tuy nhiên, cùng một tệp dylib hoạt động độc lập
Trong ví dụ mã này. Điều gì sẽ được đọc sau "this.method2();"? Nó có chuyển sang phương thức 2() trước khi trả về Giá trị trả về không? phương thức int công khai1(int returnV
Dự án của tôi có các phần phụ thuộc được định cấu hình thông qua gradle. Tôi muốn thêm các phần phụ thuộc sau: nhóm biên dịch: 'org.restlet.jse', tên: 'org.restlet.ext.apispark', v
Tôi sẽ chuyển phần mềm quản lý khách hàng trên Windows sang phần mềm trên Web. Tôi thấy rằng polymer có thể là một lựa chọn. Tuy nhiên, để sử dụng, chúng tôi không thể tìm thấy thành phần polymer với Chế độ xem bảng, menu thả xuống
Có một thư mục trong thư mục dự án của tôi Dự án, chẳng hạn như thư mục ED, khi tôi chỉ định trong Eclipse nơi tìm các tệp tôi viết File file = new File("ED/text.txt");
Đây là điều kỳ lạ, nó hoạt động: $('#box').css({"backgroundPosition": "0px 250px"}); nhưng nó không hoạt động, nó chỉ không thay đổi vị trí: $('# hộp') .animate
Câu hỏi này đã có câu trả lời ở đây: Tại sao OR làm tròn số trong Javascript? (3 câu trả lời) Đã đóng 5 năm trước. Hướng dẫn JavaScript của Mozilla
Câu hỏi này đã có câu trả lời ở đây: Hàm strcmpi có trong thư viện tiêu chuẩn C của ISO không? (3 câu trả lời) Đã đóng cửa 8 năm trước. Tôi có một câu hỏi tại sao
Tôi hiện đang sử dụng gói lưu trữ được chia sẻ và tôi không chắc nó đang sử dụng phiên bản MySQL nào, nhưng có vẻ như nó không hỗ trợ loại DATETIMEOFFSET. Có phiên bản MySQL nào hỗ trợ DATETIMEOFFSET không? Hoặc có kế hoạch
Khi nghiên cứu Seam 3, tôi phát hiện ra rằng Seam Solder cho phép áp dụng chú thích @Named cho các gói - trong trường hợp này, tất cả các hạt trong gói sẽ tự động được đặt tên như thể chúng được @Named. Tôi không thấy
Tôi biết rằng .append đôi khi sẽ tăng dung lượng của mảng và tạo thành một bản sao mới của mảng, nhưng .removeLast sẽ đảo ngược điều này và giảm dung lượng của mảng bằng cách sao chép sang một mảng mới nhỏ hơn? Câu trả lời tốt nhất là không (hoặc ít nhất nếu có thì đó là một lỗi
Thật khó để nói những gì để hỏi ở đây. Câu hỏi không rõ ràng, mơ hồ, không đầy đủ, quá rộng hoặc hùng biện và không thể trả lời hợp lý ở dạng hiện tại. Để được trợ giúp làm rõ vấn đề này để có thể mở lại, hãy truy cập trung tâm trợ giúp Đóng 1.
Công cụ xác định hàm noException có nhằm mục đích tăng hiệu suất hay không, vì có thể không có mã trong đối tượng được tạo để ghi lại các ngoại lệ, do đó, nó phải được thêm vào các khai báo và định nghĩa hàm bất cứ khi nào có thể? Lần đầu tiên tôi nghĩ đến một trình bao bọc cho các đối tượng có thể gọi được, trong đó không có ngoại lệ nào có thể tạo ra
Tôi đang sử dụng Angularjs 1.3.7 và mới phát hiện ra rằng Promise.all không cập nhật Chế độ xem Angularjs sau khi phản hồi thành công, trong khi $q.all thì có. Vì Lời hứa được bao gồm trong bản gốc
Gần đây tôi đã tìm thấy mã JavaScript này: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 Tôi sử dụng
Tôi đang viết một thư viện vectơ đồ chơi (vật lý) và tôi đang gặp phải một vấn đề trong đó GHC khẳng định rằng các hàm phải có Integer. là kiểu của họ. Tôi muốn nhân vectơ với vectơ cũng như đại lượng vô hướng (chỉ sử dụng * ), mặc dù điều này có thể đạt được bằng cách chỉ sử dụng Vector
Hàm mail() của PHP gửi thư tốt, nhưng Swift_MailTransport của Swiftmailer không hoạt động!
Tôi đã thử kết xuất dữ liệu của mình qua tập lệnh php nhưng không có dòng lệnh. Vì vậy, tôi đã tạo tệp .sql của mình bằng cách sử dụng tập lệnh này và sau đó tôi đã thử sử dụng tập lệnh của mình: $link = mysql_connect($host, $u
Sử dụng thư viện chuẩn sqlite3 trong Python 2.6.4, truy vấn sau chạy tốt trên dòng lệnh sqlite3: select đoạnid, node_t, start, number,title
Gần đây tôi đã tìm thấy mã JavaScript này: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 Tôi sử dụng
Tôi là một lập trình viên xuất sắc, rất giỏi!