GCP 中 BigTable 中的列族如何与关系数据库中的列相关联

如何解决GCP 中 BigTable 中的列族如何与关系数据库中的列相关联

我正在尝试将当前位于关系数据库中的表迁移到 BigTable。 让我们假设该表当前具有以下结构:

表格:消息

列:

  • Message_id
  • Message_text
  • Message_timestamp

如何在 BigTable 中创建类似的表? 从我在文档中看到的,BigTable 使用 ColumnFamily。 ColumnFamily 是否相当于关系数据库中的列?

解决方法

BigTable 在很多方面都不同于关系数据库系统。

关于数据库结构,BigTable 应该被认为是一个宽列的 NoSQL 数据库。

基本上,每个记录都由一个表示,对于这一行,您可以提供任意数量的名称-值对。

该行具有以下特征。

行键

  • 每一行都由一个行键唯一标识。它类似于关系数据库中的主键。该字段由系统按字典顺序存储,并且是表中唯一会被索引的信息。
  • 在构建此键时,您可以选择单个字段或组合多个字段,用 # 或任何其他分隔符分隔。
  • 此键的构建是构建表时要考虑的最重要的方面。您必须考虑如何查询信息。除其他外,请记住几件事(始终记住字典顺序):
    • 通过连接字段来定义前缀,让您可以高效地获取信息。 BigTable 允许您扫描以特定前缀开头的信息。
    • 相关,以一种允许您将公共信息(例如,在来自某个来源的所有消息中)存储在一起的方式对您的密钥进行建模,以便可以在一种更有效的方式。
    • 同时,以最大限度地提高 BigTable 集群中不同节点之间的分散性和负载平衡的方式定义键。

列族

  • 与行相关的信息组织在列族中。它与关系数据库中的任何概念都没有对应关系。
  • 一个列族允许您将几个相关的字段、列聚集在一起。
  • 您需要事先定义列族。

  • 一列将存储实际值。它在某种意义上类似于关系数据库中的列。
  • 您可以为不同的行设置不同的列。 BigTable 会稀疏地存储信息,如果您不为行提供值,它将不占用空间。
  • BigTable 是一个三维数据库:对于每条记录,除了实际值之外,还会存储一个时间戳。

在您的用例中,您可以像这样为您的表格建模(例如,考虑到您也能够识别消息的来源,并且它是一个值信息):

行键 = message_origin#message_timestamp(截断为半小时、小时...)1#message_id

列族 = message_details

= message_text,message_timestamp

这将生成行键,例如,考虑消息是从 ID 为 MT43 的设备发送的:

MT43#1330516800#1242635

请按照@norbjd 的建议,查看相关的 documentation 以深入了解这些概念。

需要注意与关系数据库的一个重要区别:BigTable 仅提供原子单行事务,并且如果使用单集群路由。


1 参见,例如:How to round unix timestamp up and down to nearest half hour?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res