HBase - 实时更改 rowkey 设计的最佳方法 table
HBase - Best approach to change rowkey design on live table
在已经包含大约一个带有 JSON 的单元格有 150 万行并且正在生产中?多个系统访问 table,因此最好在进程结束时以相同的 table 名称结束。我们有大约 40 个容量节点,通常每个单元不到 1MB。估计 table 大小低于 10GB(但可能甚至低于 2GB)
此刻我们在想
- 调整我们的应用程序,这将支持两个键并仅以新格式保存。
这种方法的缺点是转换需要很长时间,我们将付出尝试使用尚不存在的新密钥进行首次读取的代价,回滚很复杂
- 复制一个table,如果需要,让它压缩,重命名tables 'current' => 'obsolete'和'copy' => 'current'
缺点是重命名 table 的唯一方法是克隆快照。对压缩的未知影响 => 给定 table
的性能
- 停止生产,运行 将更改所有密钥的脚本,切换应用程序以支持新的密钥格式
缺点是停机时间和触发压缩的风险,这会长时间影响性能
你能想到更好的方法吗?或者你会推荐哪一个?
很大程度上取决于集群的大小以及实时访问集群的程度。但这里有一些注意事项:
- 你说你有 150 万行。按照 HBase 标准,这是非常小的,因此您可能会过度考虑实际会对集群产生多大影响以及各种操作需要多长时间(同样,取决于集群的大小以及实际存储的数据量)那 150 万行)。
- 据我所知,HBase中没有'renaming'一个table。 IE。不要假设您可以并行创建一个新的 table 然后简单地重命名 NewTableName->OldTableName。您也许可以通过很多技巧来伪造它,但我会担心在制作中这样做 table.
- 如果您的客户端应用程序可以更改为指向新的 table,那么事情会容易很多。
- 快照和压缩是 'online' 操作。即使实时 table 的主要压缩实际上也不会中断您的操作,并且可以很快发生。更不用说压缩实际上并不存在的 table 了。但是对于快照,我不确定您将如何处理可能发生的更新 post-snapshot.
在已经包含大约一个带有 JSON 的单元格有 150 万行并且正在生产中?多个系统访问 table,因此最好在进程结束时以相同的 table 名称结束。我们有大约 40 个容量节点,通常每个单元不到 1MB。估计 table 大小低于 10GB(但可能甚至低于 2GB)
此刻我们在想
- 调整我们的应用程序,这将支持两个键并仅以新格式保存。
这种方法的缺点是转换需要很长时间,我们将付出尝试使用尚不存在的新密钥进行首次读取的代价,回滚很复杂
- 复制一个table,如果需要,让它压缩,重命名tables 'current' => 'obsolete'和'copy' => 'current'
缺点是重命名 table 的唯一方法是克隆快照。对压缩的未知影响 => 给定 table
的性能- 停止生产,运行 将更改所有密钥的脚本,切换应用程序以支持新的密钥格式
缺点是停机时间和触发压缩的风险,这会长时间影响性能
你能想到更好的方法吗?或者你会推荐哪一个?
很大程度上取决于集群的大小以及实时访问集群的程度。但这里有一些注意事项:
- 你说你有 150 万行。按照 HBase 标准,这是非常小的,因此您可能会过度考虑实际会对集群产生多大影响以及各种操作需要多长时间(同样,取决于集群的大小以及实际存储的数据量)那 150 万行)。
- 据我所知,HBase中没有'renaming'一个table。 IE。不要假设您可以并行创建一个新的 table 然后简单地重命名 NewTableName->OldTableName。您也许可以通过很多技巧来伪造它,但我会担心在制作中这样做 table.
- 如果您的客户端应用程序可以更改为指向新的 table,那么事情会容易很多。
- 快照和压缩是 'online' 操作。即使实时 table 的主要压缩实际上也不会中断您的操作,并且可以很快发生。更不用说压缩实际上并不存在的 table 了。但是对于快照,我不确定您将如何处理可能发生的更新 post-snapshot.