gpt4 book ai didi

sql-server - Redis 作为 RDBMS 的缓存

转载 作者:IT王子 更新时间:2023-10-29 06:04:07 25 4
gpt4 key购买 nike

我计划使用 redis 作为现有数据库(MS SQL)的缓存。我想使用 redis 中的数据放在前端。我将处理大约 100GB 的大量数据一天。我将主要有包含时间值和一些计数器值(大约 10-100 列)的表。如果我要根据小时、天等对这些大量数据进行聚合,redis 将如何执行……(即基于时间列。)Redis 是正确的方法还是有其他选择?与 RDBMS 相比,我不知道在处理聚合时 nosql 有多好。在这种情况下,MonogoDB 会怎么做?

谢谢

最佳答案

如果您需要存储 100Gb 并且您不希望您的数据集增长太多,请从 3 个 redis 实例开始,每个实例具有 64Gb 的 RAM,总共 192Gb,足以容纳您的数据集并且成长空间。

每个 redis 实例都是主实例,因此您的数据将在实例之间平均分配。您需要使用简单的哈希算法从应用程序层跨实例进行分片,例如...

(from your application layer)
shardKey = "redis" + getShardKey( cacheKey);
redisConnection = getRedisConnectionByShardKey( shardKey);
//do work with redisConnection here

getShardKey(string) 函数获取 cacheKey,将其转换为整数,然后根据 redis 实例的数量对其进行修改,返回 0、1 或 2。配置连接池每个redis实例,给每个实例起一个名字,比如redis0redis1等,调用hash函数后,使用shard key获取目标redis的连接实例。获得所需数据后,在应用层进行聚合。

这是一个简单的方法;它在 redis 实例之间平均分配数据(或多或少),并避免将所有内容都塞入单个 redis 实例。 Redis 是单线程的,所以如果你正在做大量的 I/O,你将受到你的 cpu 处理请求的速度的限制;使用多个实例来分配负载。

当您的数据集增长到超过 180Gb 时,此解决方案就会失效。如果您添加另一个 Redis 实例以容纳更大的数据集,则必须更新哈希函数以反射(reflect)模 4,而不是模 3,并且您将不得不移动大部分数据,这变得很丑陋,因此仅在以下情况下使用此方法您 100% 确定数据集将保持在 150Gb 以下。

关于sql-server - Redis 作为 RDBMS 的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com