草庐IT

分片键

全部标签

algorithm - Redis:大型键集的高效键分片

我遇到了超出服务器RAM容量的问题。我需要减小数据库大小,以便仍然可以使用Redis。我的应用程序是一个巨大的键/值存储,其中键是用户给定的文本字符串(目录/文件路径)。这些值是指向我创建的对象的非常简单的指针。所以它是一个对象存储。问题是我有一个PB的对象,其中一个对象可能是100K字节。我实际上可以将平均对象限制为不小于1M字节,因此10^15/10^6=10^9个对象。因为每个对象都需要一个key,即10^9,或1Gkey。如果每个键/值对为100个字节,则RAM中有100GB。这几乎适合具有128GBRAM的服务器,但它并不是服务器中唯一发生的事情。如果可以的话,我想减少足迹。

redis - 跨redis分片的排序、并集交集

我是redis的新手。我需要知道排序、交集和其他聚合操作是如何跨分片进行的。是否可以执行这样的操作? 最佳答案 Redis不会透明地为你处理这个。您基本上需要从每个分片中检索结果,然后重新组合它们(假设您的搜索是针对分片键以外的其他内容)。一些库使Redis的分片更容易(参见predishttps://github.com/nrk/predis)。不过,基本上,您要做的是针对所有分片运行查询,返回结果,然后合并结果、排序、相交、聚合等。Redis集群项目大家不妨关注一下http://redis.io/topics/cluster-s

java - 将单实例 Redis 数据库移动到分片数据库?

我有一个非分片Redis数据库,我想将数据复制到分片数据库。我环顾四周,但我能找到的最佳做法是将转储文件导出到Json,然后将其重新加载到新的分片数据库实例,这样可以保留key哈希。感谢您的帮助。 最佳答案 RedisCluster仍在开发中,所以同时可以采取以下方法-如果您使用PHP、JAVA或scala,则Predis、Jedis和scala-redis支持客户端分片,即在客户端使用哈希在多个redis服务器之间平均分配负载。如果您不使用上述语言,请查看Redis-Sharding-https://github.com/kni/

redis - 访问多个 Redis 分片

您好,我将使用多个Redis实例和实例之间的一些分片。我的问题是,如果加载网页需要访问多个分片,性能是否会受到[明显的影响]。我的基本概述是在多个Redis分片之间实现负载平衡*下面的脚注,可能为此使用Twemproxy。并且只在一个分片上拥有与特定用户数据有关的所有内容(例如“喜欢”、“用户信息”、“保存列表”等),但也有多个包含对象的Redis实例(许多不同的对象)用户将访问)和有关所述对象的数据,这些对象也将为用户加载。我不需要对不同数据库中的多个键进行Redis操作,但我需要让Redis实例实时从n个实例返回m个键。为了与您彻底清白,我还计划使用类似这样的东西https://g

redis - 如何搭建一个简化的redis集群(支持数据分片和负载均衡)?

由于redis集群还在开发中,现阶段想自己搭建一个简单的。系统应支持数据分片、负载均衡和主从备份。初步方案如下:主从:在不同位置使用多个主从对来增强数据安全性。Matsters负责写操作,而masters和slaves都可以提供读服务。在一次写操作期间,数据被发送到所有主设备。主从之间使用Keepalived检测故障并自动切换主从。数据分片:在客户端写入一致性哈希,支持读写时数据分片,以防单机内存不够用。负载均衡:使用LVS将读请求重定向到相应的服务器进行负载均衡。我的问题是如何将LVS和数据分片结合在一起?例如,由于数据分片,所有key都被拆分存储在服务器A、B、C中,不重叠。考虑s

java - 分发(分片)集合(如列表、集合等)键的任何解决方法

我们使用Redis2.8.17作为JobQueues。我们正在使用RPUSH和BRPOPLPUSH来制作可靠的队列。根据我们当前的设计,多个应用程序服务器将(RPUSH)作业推送到单个作业队列。由于BRPOPLPUSH操作在Redis中是原子操作,作业稍后将被弹出(BRPOPLPUSH)并由任何服务器的消费者处理。由于应用服务器能够横向扩展,我有点担心REDIS将来可能成为瓶颈。我从有关redis分区的文档中了解到以下内容:“不可能像一个非常大的排序集那样使用单个巨大的键对数据集进行分片”我想知道预分片应用服务器队列是否是横向扩展的唯一选择。在上面的设计中,集群有什么可以做的吗?

redis - 分片常规 Redis 与 Redis 集群

与仅使用常规Redis和创建分片相比,使用Redis集群有哪些优势?在我看来,RedisCluster更注重数据安全(让主从架构解决故障)。 最佳答案 我认为当您需要在不丢失任何数据的情况下重新分片集群时就会出现差异。一般采用哈希策略将数据均匀分片到多个Redis服务器,如Redis3.0集群和twemproxy做。当一个新的Redis加入到集群中,一些数据负载应该由它来承担时,你怎么知道它应该服务的数据是否还没有迁移呢?也许需要对整个key空间进行强力扫描,或者像一致性哈希这样的智能方法就可以做到,但这在某种程度上是复杂的。3.0

python - 使用 Python 水平扩展或分片 Python-RQ 或 Redis

尝试横向扩展用作Python-RQ任务服务器的Redis实例.据我所知,最好的方法是将分片逻辑(最有可能使用ConsistentHashing)添加到自定义ConnectionPool和/或Connection类。我宁愿使用用于一致性哈希机制的库-因为它看起来应该是可用的,并且很可能比本土解决方案更好/经过更多实战检验。做这样的事情什么是好的模式?有没有我应该研究的图书馆?有什么我应该考虑的遗漏吗?非常感谢! 最佳答案 我认为您应该牢记几件事。第一个是关于你的瓶颈在哪里以及为什么你应该在一个Python-Rq范例下在你的Redis后

redis - 为什么redis集群重新分片不是自动的?

当我在redis集群中添加一个节点时,它有0个哈希槽。为什么rediscluster不会自动做一个resharding操作来让新的节点完全发挥作用? 最佳答案 如你所见here,redis现在支持自动分区。 关于redis-为什么redis集群重新分片不是自动的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31782672/

c# - 大对象堆分片

我正在处理的C#/.NET应用程序正在遭受缓慢的内存泄漏。我已经使用CDB和SOS来尝试确定发生了什么,但数据似乎没有任何意义,所以我希望你们中的一个人以前可能经历过这种情况。该应用程序在64位框架上运行。它不断地计算数据并将其序列化到远程主机,并且对大对象堆(LOH)产生了相当大的影响。但是,我希望大多数LOH对象都是暂时的:一旦计算完成并已发送到远程主机,就应该释放内存。然而,我看到的是大量(实时)对象数组与空闲内存块交错,例如,从LOH中获取一个随机段:0:000>!DumpHeap000000005b5b1000000000006351da10AddressMTSize...0