《CDP企业数据云平台从入门到实践》——CDP之数据储存(1) https://developer.aliyun.com/article/1226442?groupCode=ClouderaCDP
4. OPDB 如何适应用户环境
如图所示,操作型数据库中的数据来源于不同的途径,有实时采集数据、离线批量转换数据等。因此,操作型数据库中的数据大致会包含两类:实时处理后的数据和批量处理后的数据。整理好的数据可以支持三类场景:
• 企业内部应用:CRUD、状态持久性、事务、操作报告等。
• 数据仓库:针对分析工作负载提取到 DW 做进一步的分析使用操作。
• 机器学习:构建特征仓库和模型服务等。
在企业内部应用和机器学习中更新的数据也会返回到操作型数据库中。
5. OPDB 数据摄取选项
下图列举了最常见的将数据加载到 OPDB 的工具。
二、 通过 OPDB 构建应用
1. NoSQL 的含义
NoSQL = Not Only SQL,运用原生稀疏矩阵模型,以多种方式最优地表示数据。NoSQL 的类型包括:
• 时间序列:排序键和列访问允许高效存储和检索时间序列数据。
• 图:可以用多种方式表示,最常见的是使用一个表来表示顶点,另一个表示边。
• 关系:关系表、行和列可以通过 Phoenix 直接映射到它们的 OPDB 等价物。
• 文档:可以存储多媒体文件等二进制文件,也可以使用列来分解文档来表示属
性。
2. OPDB SQL 特性
1) 基于 SQL 的接口
用户可以使用符合 ANSI 的 SQL 简化数据访问。
下图列举了相同任务(Task)使用 HBase Java API 和使用 SQL 操作的代码,可以看到使用 SQL 的代码更简便:
2) Schema 演变
Schema 的演变实现更少的数据建模,更多的模型数据。
下面列举了实例中的三个操作进行讲解:
操作一:
CreateatableCREATETABLEusers (idINTEGERPRIMARYKEY, usernameVARCHAR); UPSERTINTOusers (id, username) VALUES (1, 'admin '); SELECT*FROMusers;
操作二:
Addanewcolumn(withoutredefiningthetable)UPSERTINTOusers (id, username, stateVARCHAR) VALUES (2, 'KM ', 'CA '); SELECT*FROMusers;
操作三:
QuerythenewcolumnSELECT*FROMusers (stateVARCHAR); --orCREATEVIEWv1ASSELECT*FROMusers (stateVARCHAR); SELECT*fromv1;
通过以上方式进行数据 Schema 的演变,可以有效的减少 Schema 的维护以及数据迁移操作。
3) 多行事务
Phonix 的 SQL 代码与 MySQL 的代码相同:通过这种方式可以支持数据作为事务提交。
4) 二级索引
二级索引是非主键谓词的点查找和扫描。
OPDB 存储按主键顺序索引的数据,使用主键谓词的点查找和范围扫描速度很快。使用二级索引可以避免由于没有主键谓词的查询而导致的全表扫描,从而提高查询速度。
创建二级索引:
CREATETABLEuser (idBIGINTPRIMARYKEY, emailVARCHAR, pwVARBINARY, fnVARCHAR, lnVARCHAR); CREATEINDEXidxONuser (email); IncludefrequentlyaccessedcolumnswithcoveringindexesCREATEINDEXidxONuser (email) INCLUDE (pw); SELECTemail, pwFROMuserWHEREemail='user@phoenix.apache.org '; UsearbitraryexpressionswithfunctionalindexesCREATEINDEXidxONuser (UPPER(ln||' '||fn)) INCLUDE (email) ; SELECTemailFROMuserWHEREUPPER(ln||' '||fn) ='ALICE BOB ' ;
5) 时间旅行查询
时间旅行查询是查询过去状态的数据。
时间旅行对过去任何时间戳发出的相同查询将忽略自指定时间戳以来的任何更新,比如指定时间戳是去年一月,查询将忽略一月以后的数据更新,因此每次都会产生相同的结果。
常见的时间旅行用例:
• 调查:某些活动(例如欺诈调查)受益于能够检查特定时间点的记录状态。
• 机器学习:模型训练需要可重现。 时间旅行查询消除了提取和持久化训练数据的需要,大大简化了流程。
通过将 CurrentSCN 会话属性设置为过去的时间戳来发出时间旅行查询:
LongoneHourAgo=System.currentTimeMillis() -60*60*1000 ; props.setProperty("CurrentSCN", oneHourAgo); Connectionconn=DriverManager.connect(myUrl, props); conn.createStatement().execute("SELECT * FROM users WHERE email = 'users@phoenix.apache.org '");
《CDP企业数据云平台从入门到实践》——CDP之数据储存(3) https://developer.aliyun.com/article/1226404?groupCode=ClouderaCDP