当前位置: 首页 > 面试题库 >

一致的散列作为扩展写入的一种方式

张坚白
2023-03-14
问题内容

我试图弄清楚自己是否走对了。我正在构建(实时)统计/分析服务,并且使用redis存储一些集合和哈希。

现在,让我们假设我取得了一些成功,并且需要扩展。哈希环技术看起来不错,但是我有一个印象,它仅适用于缓存方案。

如果节点出现故障怎么办?从理论上讲,它的密钥现在由其他节点拥有。实际上,他们将没有数据。丢了吧?与添加/删除节点相同。

我错过了一些基本的东西吗?这可以是一个穷人的集群吗?


问题答案:

在集群中使用多个节点有两个原因:

  • 分片以限制每个节点上存储的数据量
  • 复制可减少读取负载并允许删除节点而不会丢失数据。

两者在本质上是不同的,但是您可以实现两者-使用一致的散列来指向具有标准主/从设置的一组节点,而不是单个节点。

如果群集是您的主要数据存储而不是缓存,则您将需要其他重新分配策略,其中包括复制数据。

我的实现基于让客户端从64k个存储桶中选择一个进行哈希处理,并具有将该存储桶映射到节点的表。最初,所有映射到节点#1。

当节点#1变得太大时,其从节点将成为主节点#2,并且该表将更新,以将节点#1密钥的一半映射到节点#2。此时,所有读取和写入将与新映射一起使用,您只需要清理错误节点上的键即可。根据性能要求,您可以一次检查所有按键,也可以像到期系统一样检查随机选择的按键。



 类似资料:
  • 提前道谢。

  • 但当我将扩展名更改为时就会失败。 经过一些调试后,我确信如果使用类似的url的话,请求甚至不会被映射 对于高日志级别,我可以看到映射被Spring捕获: MVC-Config: 有人知道吗?

  • This section is intended as a walkthrough for the creation of custom extensions. It covers the basics of writing and activating an extensions, as well as commonly used features of extensions. As an ex

  • 你好,有人知道如何发现扩展< code>ArrayBlockingQueue的类吗?例如,我想监视下面的< code>MyBufferQueue类 在属于java库的< code>ArrayBlockingQueue类中,有这样一个方法: 我遇到的问题是,当我监视类< code>MyBufferQueue时,以及在测试期间访问方法< code > ArrayBlockingQueue . put(

  • 问题内容: 我有近30个课程,我想将此课程应用于我的button元素。我不想为每个按钮元素添加class属性。有没有办法创建新的按钮类? 问题答案: 您将必须使用CSS预处理器来执行此操作。 萨斯 编译为: **混合 编译为: 减 LESS具有与SASS类似的共生关系,并且具有 扩展 和 混合功能 ,但是如果您想将一个类的样式添加到另一个类中,则LESS会更宽容一些。尽管我认为LESS中仍然考虑使

  • 本文向大家介绍ThinkPHP中Widget扩展的两种写法及调用方法详解,包括了ThinkPHP中Widget扩展的两种写法及调用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP中Widget扩展的两种写法及调用方法。分享给大家供大家参考,具体如下: Widget扩展一般用于页面组件的扩展,在页面根据需要输出不同的内容,下面介绍一下ThinkPHP中Widget的两