我有一个1M x 100
随机数的锯齿状数组():
0 --->[ 100 random numbers]
1 --->[ 100 random numbers]
2 --->[ 100 random numbers]
.. --->[ 100 random numbers]
.. --->[ 100 random numbers]
1M --->[ 100 random numbers]
这些100 random numbers
是我需要将它们映射到 userId 的图像 ID(即0..1M
)
我想将它们存储在 Redis 中。(通过哈希,因为我知道哈希在 Redis 中非常有效地存储——这也是instagram使用它来解决类似问题的方式)
锯齿状数组:
int b = 1000000;
int[ ][] Friends = new int[b][];
(一切都好。)
随机数的初始化:
for (int i = 0; i < b; i++)
{
Friends[i] = ParallelEnumerable.Range(0, 100).Select(n => appRandom.Value.Next(1, b )).ToArray();
}
(一切都好。)
这里是我如何使用 Redis 客户端输入值:(我使用 1000 桶优化方法)
using (IRedisClient redisClient = new RedisClient(host))
{
for (int i = 0; i < Friends.Length; i++)
{
for (int j = 0; j < 100; j++)
redisClient.SetEntryInHash("urn:buck>" + (i / 1000), Friends[i][j].ToString(),i.ToString());
}
}
问题 :
插入阶段(我不关心初始化时间)——现在需要一个多小时 ,但还没有25%
!
相关资料:
我有一台功能强大的电脑:(win 8),还添加了<gcAllowVeryLargeObjects enabled="true" />
问题 :
- 我做错了什么,如何使插入更快?
(相关信息:这 100 个数字是图像 ID,我需要将它们映射到 userId)