【问题标题】:Database replication on Raspberry Pi mesh networkRaspberry Pi 网状网络上的数据库复制
【发布时间】:2015-09-11 10:08:13
【问题描述】:

对于我应该使用什么数据库来实现跨可变数量目标的复制,是否有人有好的建议? 我有一个 Raspberry Pi 服务器的网状网络,每个服务器都可以包含一个数据库。我希望通过网络复制每个数据库的内容,但我无法保证在任何时间点都有哪些节点可用。

大多数 nosql 数据库(例如 CouchDB、Cassandra)似乎只支持配置中定义的目标。

所以(假设 nosql 是最好的数据库选项);是否有可以复制到可变数量目标的 nosql 数据库?

【问题讨论】:

  • 最好有一些关于数据量、添加更新和删除频率以及可接受的传播延迟的信息。还有节点永久加入或离开网络的速率。

标签: database raspberry-pi2 database-replication nosql


【解决方案1】:

对于这种情况,我推荐Hadoop Distributed File System (HDFS)

使 HDFS 对您的方案具有吸引力的功能:

  • 它是一个具有可变复制因子的分布式文件系统(默认值为 3,几乎不可能丢失数据)。
  • 可以扩展到数千台不同的机器
  • 不依赖于单个节点的高可用性 - 自动处理节点故障并从停机节点复制任何数据

至于实际的数据库... HBase、Mongo 或 Cassandra 都是不错的选择,选择您最熟悉的任何一个 - HDFS 将为您处理所有复制。

【讨论】:

    【解决方案2】:

    根据这个 SO 响应:

    https://stackoverflow.com/a/8787999/2020565

    在查看他们的网站时,也许您应该查看 Elliptics: http://www.ioremap.net/projects/elliptics/

    网络不使用专用服务器来维护元数据 信息,它支持冗余对象存储。小到中 大小写基准可以在 eblob 页面上找到。

    【讨论】:

      【解决方案3】:

      根据我的经验,Elasticsearch 具有出色且易于使用的集群管理,它支持开箱即用的出色功能,例如节点自动发现、数据复制、自动重新平衡等,请查看docs。通常它用于从其他数据库复制数据以使其可搜索,但我不明白为什么它也不能在这种情况下使用。

      基本上,当您创建“表”(在 ES 中称为“索引”)时,您可以决定数据应该在多少个“分区”(称为“分片”)中进行分区,并临时设置多少您想要拥有的该表的副本(这不是 100% 匹配正确的术语,因为“索引”可以包含多个“类型”,但我认为这是最好的类比)。

      具有三个 Pi 的示例项目是 here

      我也读过一些关于 Cassandra 的文章,我想它会有类似的功能,例如提到了分区和副本here

      【讨论】:

      • 其他数据库的 RAM 和 CPU 要求可能较低,因为 Elasticsearch 针对数百万个文档的 10 - 100 毫秒查询时间进行了优化。它不仅仅是一个简单的键值存储。
      【解决方案4】:

      我建议您查看Hazelcast。它们在跨可能发生变化的集群的内存复制方面做得很好。如果您想要磁盘支持的持久性,您必须编写一个自定义客户端来将数据存储到您选择的本地数据库中,但是 Hazelcast 可以在内存中处理跨集群的复制并且具有很大的灵活性。

      【讨论】:

      【解决方案5】:
      1. 你应该考虑Erlang OTP平台和Mnesia数据库

      2. 如果你更喜欢C语言你可以考虑SQlite in memory数据库和nanomsg框架

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-13
        • 1970-01-01
        相关资源
        最近更新 更多