我想在许多机器中将大量序列表示和存储为前缀树,如下所示:+主机将表示序列的前缀。+n 个从机将代表 n 个子前缀树,每个子前缀树包含其余的序列。
我想知道我是否可以使用 Hbase 来解决我的问题?你能分享一下这方面的经验吗?
HBase 表按行键按字典顺序排序。因此,在您的场景中,键存储在 HBase 中的自然方式是子树将立即跟随每个前缀,即子树很可能位于父树所在的同一区域(因为它们共享相同的前缀)。
如果对您来说非常重要的是,您将拥有一个节点来保存主节点,而其他节点则保存其余节点,那么您需要在分区键、平衡区域等方面努力工作。正如 Javadba 所说,可能的解决方案在HBase 是将概念分离到单独的表中,如果您想确保它们不共享机器,您仍然需要进行平衡
如果确切的物理架构对您来说不太重要,而您真正想要的是故事的效率 - 您可能需要查看图形数据库,例如基于 HBase(或 Cassandra)、Neo4J等构建的Titan 。
也许您对“大师”的概念与 HMaster 并不完全相同。HMaster 用于管理目的,例如识别哪个 RegionServer 包含给定表的给定行集的 Region。
您的任何表的行中的所有数据都将位于 RegionServer 的内部。从 RegionServers 读取/写入数据是在不与 HMaster 进行任何交互的情况下完成的,除了确定行位于哪个服务器上。
回到您的“主”与“从”机器拓扑:您可能决定将序列前缀存储为单独的表。然后前缀的 RegionServers 可以与子前缀树分开管理。在任何情况下,都没有“单一主机”来存储数据,而是一个或多个 RegionServer 上的一个或多个 Region。