此用例的最佳 Redis 数据结构
Best Redis DataStructure for this usecase
我有一个包含 5000 行和 200 万列的二维数组,存储的值只是布尔值 0 或 1。最适合在 Redis 中存储此用例的 Redis 数据结构是什么?
你可以在一个 Redis 实例中创建 5000 个数据库,然后用值为 '1' 的列的索引保存每一行,而不是保存所有 200 万列。通过这样做,也许您可以将每行的大小减少到 50 万个长度。那么在反序列化的时候,可以通过编程的方式建立数组的初始值。
//example: row -0 - columns: 00101....1
save [2,4,...,1999999] // considering zero based indexing
一种直接的方法是将数组存储为字符串并使用 bit commands to manipulate it. That should lead to minimal memory use, and SETBIT
and GETBIT
都是 O(1)。
如果数据可以放入 Redis 字符串的 512MB limit 中,您可以只使用一个字符串。不过,您提供的大小太大,因此另一种方法是将每一行存储为单独的字符串。
我有一个包含 5000 行和 200 万列的二维数组,存储的值只是布尔值 0 或 1。最适合在 Redis 中存储此用例的 Redis 数据结构是什么?
你可以在一个 Redis 实例中创建 5000 个数据库,然后用值为 '1' 的列的索引保存每一行,而不是保存所有 200 万列。通过这样做,也许您可以将每行的大小减少到 50 万个长度。那么在反序列化的时候,可以通过编程的方式建立数组的初始值。
//example: row -0 - columns: 00101....1
save [2,4,...,1999999] // considering zero based indexing
一种直接的方法是将数组存储为字符串并使用 bit commands to manipulate it. That should lead to minimal memory use, and SETBIT
and GETBIT
都是 O(1)。
如果数据可以放入 Redis 字符串的 512MB limit 中,您可以只使用一个字符串。不过,您提供的大小太大,因此另一种方法是将每一行存储为单独的字符串。