-
1 使用GeminiDB for Cassandra流捕获表活动1.1 功能介绍当存储在GeminiDB for Cassandra集群中某张表的某项目发生变更时,其他的程序能够做出相应的变更,比如:一个应用程序更改了GeminiDB for Cassandra集群中的某行数据,另一个应用程序能够读取到这行数据变更并做出相应的动作。GeminiDB for Cassandra支持这种类似的场景。流表捕获原表的变动,并存储24小时之后过期。客户端通过SDK可访问流表并获取数据修改前后的项目数据。GeminiDB for Cassandra流是一种有关表中的项目修改的有序信息流,当启动某张表的流时,GeminiDB for Cassandra流表捕获原表的数据项目的更改信息。当应用程序在表中插入、更新、或者删除某条数据时,流表都会记录一条修改数据的流记录。流记录包含对表中某条数据所做的数据修改的相关信息,包含修改前后的新旧数据记录。原表中修改的每个项目,流表中的记录将按照对应的实际修改的顺序显示。流表会实时的监控原表的记录,包括插入、删除、更新操作,以便能够在其他情况使用,但不包含DDL操作记录;流表使用GeminiDB for Cassandra的物化视图实现,遵循物化视图的相关限制,比如有必须先删除物化视图表之后才能删除原表,对应必须要先删除流表才能删除原表。1.2 使用场景主要用于Cassandra往大数据/ES(Elasticsearch)同步数据变化的场景,支撑客户对应业务开展。1.3 功能特色华为GeminiDB for Cassandra专有能力,原生Cassandra不支持。2 GeminiDB for Cassandra流使用方法概述GeminiDB for Cassandra原表与流表维护两个独立的表。在开启原表的流开关之后,访问原表并且有操作原表数据会记录到对应的流表中,要读取处理流表记录,通过访问流表,访问方式与数据库其他表的访问方式相同,见第四、五章节访问方法。3 开启关闭流启用流的方式:使用alter table KS.TABLE with stream_enabled=true 语句启用流,当前流支持新旧映像。关闭流:使用alter table KS.TABLE with stream_enabled=false 可以随时禁用流。关闭流之后当前流表中的数据不会立即删除,24之后删除,原表中数据的变更不会再记录到流表中。举例:CREATE TABLE ks.table ( id int, name text, addr text,age int,email text,PRIMARY KEY (name, id)); // 创建表Alter TABLE ks.table with stream_enabled=true; // 开启流Desc ks.table; // 查看流表是否创建INSERT INTO ks.table (name , id , addr , age , email ) VALUES ('xiaoxin',31,'beijing1',33,'xiaoxin@163.com'); // 向原表写入数据select * from ks."table$streaming"; // 查看流表是否有相应数据产生Alter TABLE ks.table with stream_enabled=false; // 关闭流表 4 读取和处理流记录应用程序要读取和处理流时,应用程序需要通过SDK连接到C*流表进行相应操作。流表中的每条流记录均代表一个原表中数据的修改,每条流记录都会有一个时间信息,标识这条流产生的时间信息。每条流记录会在24小时后自动删除。流表结构:CREATE TABLE ks.table$streaming ( @shardID text, @eventID timeuuid, pk, ck, @newOldImage boolean, @eventName text, co1, co2, PRIMARY KEY (@shardID, @eventID, pk, ck, @newOldImage) //pk,ck,为原表的pk,ck, co1,co2是原表的普通列);如上,流表中包含几个特殊的字段:"@shardID"是分区键;"@eventID"是由插入时间生成的timeuuid,代表流数据产生的时间;"@newOldImage"代表新旧映像,0表示旧映像,1表示新映像;"@eventName"代表操作事件如"insert"、"update"、"delete"。迭代处理流表的数据时请使用流表的分区加上时间戳范围访问。查询分区时使用,返回分区列表:select stream_shards from system_schema.tables where keyspace_name='ks' and table_name='table';例如:cqlsh:ks> select stream_shards from system_schema.tables where keyspace_name='ks' and table_name='table1'; stream_shards-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ['-9223372036854775808', '-6148914691236517206', '-4611686018427387905', '-3843071682022823258', '-1537228672809129303', '-2', '1537228672809129299', '4611686018427387901', '5270498306774157603', '6148914691236517202', '7686143364045646492', '7686143364045646503'] (1 rows)使用分区+时间遍历流表数据,范围查询时使用"@eventID"时间查询,每次默认返回的大小根据数据量大小决定,下次迭代使用时间继续往后迭代。例如:select * From ks."table$streaming" where "@shardID" = '-9223372036854775808' and "@eventID" > a64a8340-e999-11e9-a7bd-cb5f001f61df limit 50;select * From ks."table$streaming" where "@shardID" in ('-9223372036854775808', '-6148914691236517206', '-4611686018427387905', '-3843071682022823258', '-1537228672809129303', '-2', '1537228672809129299', '4611686018427387901', '5270498306774157603', '6148914691236517202', '7686143364045646492', '7686143364045646503') limit 50;5 接口说明5.1 GetShardIteratorpublic static List<String> GetShardIterator(Cluster cluster, String keySpace, String tableName)功能: 获取流表的shard信息入参:Cluster cluster:集群的cluster信息,连接数据库使用String keySpace:要查询流数据的数据库名称String tableName:要查询流数据的表名称出参: 返回List<String> 一组shard集合,GetRecords接口中使用5.2 GetRecordspublic static StreamInfo GetRecords(Cluster cluster, String keySpace, TableEvent tableEvent)功能: 获取流表的具体数据入参:Cluster cluster:集群的cluster信息,连接数据库使用String keySpace:要查询流数据的数据库名称TableEvent tableEvent:要查询流数据相关信息,TableEvent结构如下: String table:要查询流数据的表名称String shardID:要查询流数据的shardIDString eventID:要查询流数据的时间戳信息int limitRow:要查询流数据的限制条数,没有指定情况下默认是100;出参:返回一组StreamInfo数据;具体结构如下: String shardID:流数据的shardIDString table:流数据的原表名List<RowInfo> columns:一组流数据的集合,RowInfo具体结构如下:String eventID:流数据的时间戳信息String operateType:操作类型,例如: INSERT、UPDATE、DELETEList<DataItem> Keys: 流数据对应的原表的主键信息List<DataItem> NewImage: 新映像的信息List<DataItem> OldImage: 旧映像的信息5.3 GetShardIteratorpublic static List<String> GetShardIterator(Session session, String keySpace, String tableName)功能: 获取流表的shard信息入参:Session session:数据库集群的连接session,调用函数之后session需要调用者关闭String keySpace:要查询流数据的数据库名称String tableName:要查询流数据的表名称出参: 返回List<String> 一组shard集合,GetRecords接口中使用5.4 GetRecordspublic static StreamInfo GetRecords(Session session, String keySpace, TableEvent tableEvent)功能: 获取流表的具体数据入参:Session session:数据库集群的连接session,调用函数之后session需要调用者关闭;String keySpace:要查询流数据的数据库名称;TableEvent tableEvent:要查询流数据相关信息,TableEvent结构如下: String table:要查询流数据的表名称;String shardID:要查询流数据的shardID;String eventID:要查询流数据的时间戳信息;int limitRow:要查询流数据的限制条数,没有指定情况下默认是100;List<ColumnMetadata> primaryKey: 要查询流数据的表的主键名称类型信息出参:返回一组StreamInfo数据;具体结构如下: String shardID:流数据的shardIDString table:流数据的原表名List<RowInfo> columns:一组流数据的集合,RowInfo具体结构如下:String eventID:流数据的时间戳信息String operateType:操作类型,例如: INSERT、UPDATE、DELETEList<DataItem> Keys: 流数据对应的原表的主键信息List<DataItem> NewImage: 新映像的信息List<DataItem> OldImage: 旧映像的信息5.5 GetRecords返回结果范例{ "ShardID": "-4611686018427387905", "Table": "tb1", "Records": [{ "EventID": "52236080-efb5-11e9-9c62-49626763b3dc", "OperateType": "INSERT", "Keys": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 31, "type": "int" }], "NewImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 31, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }], "OldImage": [] }, { "EventID": "52255c50-efb5-11e9-9c62-49626763b3dc", "OperateType": "UPDATE", "Keys": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 32, "type": "int" }], "NewImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 32, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }], "OldImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 32, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }] }, { "EventID": "52261fa0-efb5-11e9-9c62-49626763b3dc", "OperateType": "UPDATE", "Keys": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 33, "type": "int" }], "NewImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 33, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }], "OldImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 33, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }] }]} 5.6 接口使用demo1package com.huawei.hwcloud.stream; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ColumnMetadata; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.huawei.hwcloud.stream.req.RowInfo; import com.huawei.hwcloud.stream.req.StreamInfo; import com.huawei.hwcloud.stream.req.TableEvent; import java.util.List; public class Main { public static void main(String[] args) { Cluster cluster = Cluster.builder().addContactPoint("xxx.95.xxx.201").withPort(9042).build(); // Cluster cluster = Cluster.builder().addContactPoint(endpoint).withPort(port).withCredentials(username, password).build(); List<ColumnMetadata> pm = cluster.getMetadata().getKeyspace("test").getTable("tb1").getPrimaryKey(); System.out.println(pm); List streamShards = null; try { streamShards = StreamFetcher.GetShardIterator(cluster, "test", "tb1"); } catch (Exception e) { e.printStackTrace(); } System.out.println(streamShards); TableEvent tableEvent = new TableEvent(); tableEvent.setEventID("43e0eeb0-ee80-11e9-9c62-49626763b3dc"); tableEvent.setShardID("-4611686018427387905"); tableEvent.setTable("tb1"); tableEvent.setLimitRow(6); StreamInfo streamInfo = null; try { streamInfo = StreamFetcher.GetRecords(cluster, "test", tableEvent); } catch (Exception e) { e.printStackTrace(); } Gson gson = new GsonBuilder().create(); String line = gson.toJson(streamInfo); System.out.println(line); System.out.println(streamInfo.getColumns().size()); for (RowInfo rowInfo: streamInfo.getColumns()) { System.out.println(rowInfo.toString()); } System.exit(0); } } 5.7 接口使用demo2package com.huawei.hwcloud.stream; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ColumnMetadata; import com.datastax.driver.core.Session; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.huawei.hwcloud.stream.req.RowInfo; import com.huawei.hwcloud.stream.req.StreamInfo; import com.huawei.hwcloud.stream.req.TableEvent; import com.huawei.hwcloud.stream.utils.WrapperCassandraSession; import java.util.List; public class Main2 { public static void main(String[] args) { Cluster cluster = Cluster.builder().addContactPoint("XXX.95.XXX.201").withPort(9042).build(); // Cluster cluster = Cluster.builder().addContactPoint(endpoint).withPort(port).withCredentials(username, password).build(); List<ColumnMetadata> pk = cluster.getMetadata().getKeyspace("test").getTable("tb1").getPrimaryKey(); System.out.println(pk); Session session = cluster.connect(); List<String> streamShards = StreamFetcher.GetShardIterator(session, "test", "tb1"); System.out.println(streamShards); TableEvent tableEvent = new TableEvent(); tableEvent.setEventID("43e0eeb0-ee80-11e9-9c62-49626763b3dc"); tableEvent.setShardID("-4611686018427387905"); tableEvent.setTable("tb1"); tableEvent.setLimitRow(6); tableEvent.setPrimaryKey(pk); StreamInfo streamInfo = StreamFetcher.GetRecords(session, "test", tableEvent); Gson gson = new GsonBuilder().create(); String line = gson.toJson(streamInfo); System.out.println(line); System.out.println(streamInfo.getColumns().size()); for (RowInfo rowInfo: streamInfo.getColumns()) { System.out.println(rowInfo.toString()); } session.close(); System.exit(0); } } 6 功能约束流表中的数据保留24小时。流表中的数据会占用数据库的磁盘空间。通过CQL语句不能创建带有"$streaming"后缀的流表。流表可以通过drop MATERIALIZED VIEW ks."table$streaming";进行删除,流表使用物化视图实现,遵从物化视图的限制要求。
geminidb_fans
发表于2020-02-25 19:14:13
2020-02-25 19:14:13
最后回复
geminidb_fans
2020-02-25 19:14:13
4497 0 -
1 使用GeminiDB for Cassandra流捕获表活动1.1 功能介绍当存储在GeminiDB for Cassandra集群中某张表的某项目发生变更时,其他的程序能够做出相应的变更,比如:一个应用程序更改了GeminiDB for Cassandra集群中的某行数据,另一个应用程序能够读取到这行数据变更并做出相应的动作。GeminiDB for Cassandra支持这种类似的场景。流表捕获原表的变动,并存储24小时之后过期。客户端通过SDK可访问流表并获取数据修改前后的项目数据。GeminiDB for Cassandra流是一种有关表中的项目修改的有序信息流,当启动某张表的流时,GeminiDB for Cassandra流表捕获原表的数据项目的更改信息。当应用程序在表中插入、更新、或者删除某条数据时,流表都会记录一条修改数据的流记录。流记录包含对表中某条数据所做的数据修改的相关信息,包含修改前后的新旧数据记录。原表中修改的每个项目,流表中的记录将按照对应的实际修改的顺序显示。流表会实时的监控原表的记录,包括插入、删除、更新操作,以便能够在其他情况使用,但不包含DDL操作记录;流表使用GeminiDB for Cassandra的物化视图实现,遵循物化视图的相关限制,比如有必须先删除物化视图表之后才能删除原表,对应必须要先删除流表才能删除原表。1.2 使用场景主要用于Cassandra往大数据平台/ES(Elasticsearch)同步数据变化的场景,支撑客户对应业务开展。1.3 功能特色华为GeminiDB for Cassandra专有能力,原生Cassandra不支持。2 GeminiDB for Cassandra流使用方法概述GeminiDB for Cassandra原表与流表维护两个独立的表。在开启原表的流开关之后,访问原表并且有操作原表数据会记录到对应的流表中,要读取处理流表记录,通过访问流表,访问方式与数据库其他表的访问方式相同,见第四、五章节访问方法。3 开启关闭流启用流的方式:使用alter table KS.TABLE with stream_enabled=true 语句启用流,当前流支持新旧映像。关闭流:使用alter table KS.TABLE with stream_enabled=false 可以随时禁用流。关闭流之后当前流表中的数据不会立即删除,24之后删除,原表中数据的变更不会再记录到流表中。举例:CREATE TABLE ks.table ( id int, name text, addr text,age int,email text,PRIMARY KEY (name, id)); // 创建表Alter TABLE ks.table with stream_enabled=true; // 开启流Desc ks.table; // 查看流表是否创建INSERT INTO ks.table (name , id , addr , age , email ) VALUES ('xiaoxin',31,'beijing1',33,'xiaoxin@163.com'); // 向原表写入数据select * from ks."table$streaming"; // 查看流表是否有相应数据产生Alter TABLE ks.table with stream_enabled=false; // 关闭流表 4 读取和处理流记录应用程序要读取和处理流时,应用程序需要通过SDK连接到C*流表进行相应操作。流表中的每条流记录均代表一个原表中数据的修改,每条流记录都会有一个时间信息,标识这条流产生的时间信息。每条流记录会在24小时后自动删除。流表结构:CREATE TABLE ks.table$streaming ( @shardID text, @eventID timeuuid, pk, ck, @newOldImage boolean, @eventName text, co1, co2, PRIMARY KEY (@shardID, @eventID, pk, ck, @newOldImage) //pk,ck,为原表的pk,ck, co1,co2是原表的普通列);如上,流表中包含几个特殊的字段:"@shardID"是分区键;"@eventID"是由插入时间生成的timeuuid,代表流数据产生的时间;"@newOldImage"代表新旧映像,0表示旧映像,1表示新映像;"@eventName"代表操作事件如"insert"、"update"、"delete"。迭代处理流表的数据时请使用流表的分区加上时间戳范围访问。查询分区时使用,返回分区列表:select stream_shards from system_schema.tables where keyspace_name='ks' and table_name='table';例如:cqlsh:ks> select stream_shards from system_schema.tables where keyspace_name='ks' and table_name='table1'; stream_shards-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ['-9223372036854775808', '-6148914691236517206', '-4611686018427387905', '-3843071682022823258', '-1537228672809129303', '-2', '1537228672809129299', '4611686018427387901', '5270498306774157603', '6148914691236517202', '7686143364045646492', '7686143364045646503'] (1 rows)使用分区+时间遍历流表数据,范围查询时使用"@eventID"时间查询,每次默认返回的大小根据数据量大小决定,下次迭代使用时间继续往后迭代。例如:select * From ks."table$streaming" where "@shardID" = '-9223372036854775808' and "@eventID" > a64a8340-e999-11e9-a7bd-cb5f001f61df limit 50;5 接口说明5.1 GetShardIteratorpublic static List<String> GetShardIterator(Cluster cluster, String keySpace, String tableName)功能: 获取流表的shard信息入参:Cluster cluster:集群的cluster信息,连接数据库使用String keySpace:要查询流数据的数据库名称String tableName:要查询流数据的表名称出参: 返回List<String> 一组shard集合,GetRecords接口中使用5.2 GetRecordspublic static StreamInfo GetRecords(Cluster cluster, String keySpace, TableEvent tableEvent)功能: 获取流表的具体数据入参:Cluster cluster:集群的cluster信息,连接数据库使用String keySpace:要查询流数据的数据库名称TableEvent tableEvent:要查询流数据相关信息,TableEvent结构如下: String table:要查询流数据的表名称String shardID:要查询流数据的shardIDString eventID:要查询流数据的时间戳信息int limitRow:要查询流数据的限制条数,没有指定情况下默认是100;出参:返回一组StreamInfo数据;具体结构如下: String shardID:流数据的shardIDString table:流数据的原表名List<RowInfo> columns:一组流数据的集合,RowInfo具体结构如下:String eventID:流数据的时间戳信息String operateType:操作类型,例如: INSERT、UPDATE、DELETEList<DataItem> Keys: 流数据对应的原表的主键信息List<DataItem> NewImage: 新映像的信息List<DataItem> OldImage: 旧映像的信息5.3 GetShardIteratorpublic static List<String> GetShardIterator(Session session, String keySpace, String tableName)功能: 获取流表的shard信息入参:Session session:数据库集群的连接session,调用函数之后session需要调用者关闭String keySpace:要查询流数据的数据库名称String tableName:要查询流数据的表名称出参: 返回List<String> 一组shard集合,GetRecords接口中使用5.4 GetRecordspublic static StreamInfo GetRecords(Session session, String keySpace, TableEvent tableEvent)功能: 获取流表的具体数据入参:Session session:数据库集群的连接session,调用函数之后session需要调用者关闭;String keySpace:要查询流数据的数据库名称;TableEvent tableEvent:要查询流数据相关信息,TableEvent结构如下: String table:要查询流数据的表名称;String shardID:要查询流数据的shardID;String eventID:要查询流数据的时间戳信息;int limitRow:要查询流数据的限制条数,没有指定情况下默认是100;List<ColumnMetadata> primaryKey: 要查询流数据的表的主键名称类型信息出参:返回一组StreamInfo数据;具体结构如下: String shardID:流数据的shardIDString table:流数据的原表名List<RowInfo> columns:一组流数据的集合,RowInfo具体结构如下:String eventID:流数据的时间戳信息String operateType:操作类型,例如: INSERT、UPDATE、DELETEList<DataItem> Keys: 流数据对应的原表的主键信息List<DataItem> NewImage: 新映像的信息List<DataItem> OldImage: 旧映像的信息5.5 GetRecords返回结果范例{ "ShardID": "-4611686018427387905", "Table": "tb1", "Records": [{ "EventID": "52236080-efb5-11e9-9c62-49626763b3dc", "OperateType": "INSERT", "Keys": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 31, "type": "int" }], "NewImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 31, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }], "OldImage": [] }, { "EventID": "52255c50-efb5-11e9-9c62-49626763b3dc", "OperateType": "UPDATE", "Keys": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 32, "type": "int" }], "NewImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 32, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }], "OldImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 32, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }] }, { "EventID": "52261fa0-efb5-11e9-9c62-49626763b3dc", "OperateType": "UPDATE", "Keys": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 33, "type": "int" }], "NewImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 33, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }], "OldImage": [{ "columnName": "name", "value": "zhoujielun", "type": "varchar" }, { "columnName": "id", "value": 33, "type": "int" }, { "columnName": "addr", "value": "宇宙中心", "type": "varchar" }, { "columnName": "age", "value": 33, "type": "int" }, { "columnName": "email", "value": "zhoujielun.com", "type": "varchar" }] }]} 5.6 接口使用demo1package com.huawei.hwcloud.stream; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ColumnMetadata; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.huawei.hwcloud.stream.req.RowInfo; import com.huawei.hwcloud.stream.req.StreamInfo; import com.huawei.hwcloud.stream.req.TableEvent; import java.util.List; public class Main { public static void main(String[] args) { Cluster cluster = Cluster.builder().addContactPoint("xxx.95.xxx.201").withPort(9042).build(); // Cluster cluster = Cluster.builder().addContactPoint(endpoint).withPort(port).withCredentials(username, password).build(); List<ColumnMetadata> pm = cluster.getMetadata().getKeyspace("test").getTable("tb1").getPrimaryKey(); System.out.println(pm); List streamShards = null; try { streamShards = StreamFetcher.GetShardIterator(cluster, "test", "tb1"); } catch (Exception e) { e.printStackTrace(); } System.out.println(streamShards); TableEvent tableEvent = new TableEvent(); tableEvent.setEventID("43e0eeb0-ee80-11e9-9c62-49626763b3dc"); tableEvent.setShardID("-4611686018427387905"); tableEvent.setTable("tb1"); tableEvent.setLimitRow(6); StreamInfo streamInfo = null; try { streamInfo = StreamFetcher.GetRecords(cluster, "test", tableEvent); } catch (Exception e) { e.printStackTrace(); } Gson gson = new GsonBuilder().create(); String line = gson.toJson(streamInfo); System.out.println(line); System.out.println(streamInfo.getColumns().size()); for (RowInfo rowInfo: streamInfo.getColumns()) { System.out.println(rowInfo.toString()); } System.exit(0); } } 5.7 接口使用demo2package com.huawei.hwcloud.stream; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ColumnMetadata; import com.datastax.driver.core.Session; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.huawei.hwcloud.stream.req.RowInfo; import com.huawei.hwcloud.stream.req.StreamInfo; import com.huawei.hwcloud.stream.req.TableEvent; import com.huawei.hwcloud.stream.utils.WrapperCassandraSession; import java.util.List; public class Main2 { public static void main(String[] args) { Cluster cluster = Cluster.builder().addContactPoint("XXX.95.XXX.201").withPort(9042).build(); // Cluster cluster = Cluster.builder().addContactPoint(endpoint).withPort(port).withCredentials(username, password).build(); List<ColumnMetadata> pk = cluster.getMetadata().getKeyspace("test").getTable("tb1").getPrimaryKey(); System.out.println(pk); Session session = cluster.connect(); List<String> streamShards = StreamFetcher.GetShardIterator(session, "test", "tb1"); System.out.println(streamShards); TableEvent tableEvent = new TableEvent(); tableEvent.setEventID("43e0eeb0-ee80-11e9-9c62-49626763b3dc"); tableEvent.setShardID("-4611686018427387905"); tableEvent.setTable("tb1"); tableEvent.setLimitRow(6); tableEvent.setPrimaryKey(pk); StreamInfo streamInfo = StreamFetcher.GetRecords(session, "test", tableEvent); Gson gson = new GsonBuilder().create(); String line = gson.toJson(streamInfo); System.out.println(line); System.out.println(streamInfo.getColumns().size()); for (RowInfo rowInfo: streamInfo.getColumns()) { System.out.println(rowInfo.toString()); } session.close(); System.exit(0); } } 6 功能约束流表中的数据保留24小时。流表中的数据会占用数据库的磁盘空间。通过CQL语句不能创建带有"$streaming"后缀的流表。流表可以通过drop MATERIALIZED VIEW ks."table$streaming";进行删除,流表使用物化视图实现,遵从物化视图的限制要求。
geminidb_fans
发表于2020-02-25 19:08:33
2020-02-25 19:08:33
最后回复
geminidb_fans
2020-02-25 19:08:33
4211 0 -
本期小云妹给大家介绍个数据库的新成员——云数据库GaussDB NoSQL云数据库GaussDB(for Cassandra)介绍页入口:https://www.huaweicloud.com/product/gaussdbforcassandra.html云数据库GaussDB(for Mongo) 介绍页入口:https://www.huaweicloud.com/product/gaussdbformongo.html云数据库GaussDB NoSQL成长地图入口:https://support.huaweicloud.com/nosql/index.html
-
随着数据上云进程的加快,越来越多企业愿意把云下数据库搬到云上,同时对云上数据库的要求也越来越高。尤其是数据的完整可靠,承载着企业业务持续发展的使命,其重要性不言而喻。而企业在云上使用过程中,事务经常面临丢失的风险,可靠性和完整性得不到满足,很大程度上影响了企业的业务发展。针对这个问题,华为云数据库MySQL高可靠的应用机制能够保证事务不丢失,进而保证企业业务的稳定发展。部分云厂商为了保证事务不丢失,而选择增加一个数据库结点的方式,从而成本也上升了。华为云数据库MySQL高可靠特性介绍华为云数据库MySQL 高可靠特性是华为云数据库团队精心推出的重大功能特性,基于主备模式下在最大程度保证主库效率的同时,保证主库崩溃时快速恢复服务,并且做到事务零丢失,进而保证企业业务的稳定持续。主备模式是现今RDS for MySQL最为流行的部署形态,通常采用半同步复制。华为云数据库MySQL半同步复制凭借高可靠特性能够精准判断主库崩溃时的复制状态,并根据主库崩溃时的复制状态自行准确恢复服务,很好地保障了数据的高可靠性。华为云数据库MySQL保证数据高可靠的秘诀精准判断主库崩溃时的复制状态 华为云数据库MySQL半同步复制基于状态通道和时间戳的高可靠特性,总体上是管控节点(HA)保存主库最后的复制状态和时间戳,备实例保存主库最后的复制状态和时间戳,然后通过比较它们来精准判断主库崩溃时的复制状态。根据主库崩溃状态自行恢复服务 华为云数据库MySQL半同步复制状态下绝大多数情况是同步复制状态,极少数情况下(如执行大事务时)会转换到异步复制状态,然后自动转换回同步复制状态。而现在华为云数据库半同步复制凭借高可靠特性能够精准判断主库崩溃时的复制状态,并根据主库崩溃时的复制状态按照以下四种情况准确恢复服务:在同步复制状态下主库崩溃,拉起主库,保证不丢失事务,并且秒级恢复服务。l 在同步复制状态下主库崩溃,如果不能拉起主库,服务平滑切换到备库,保证不丢失事务,并且秒级恢复服务。l 在异步复制状态下主库崩溃,不能切换到备库,拉起主库,保证不丢失事务,并且秒级恢复服务。l 在异步复制状态下主库崩溃后,不能切换到备库,如果不能拉起主库,会在原来的数据上恢复主库,保证不丢失事务,并且分钟级恢复服务。华为云数据库MySQL半同步复制高可靠特性能最大程度保证主库效率,是因为主库的事务提交只依赖于备库,而备库把这个事务写入中继日志后立即返回一个ACK(即确认字符),没有强同步复制备库回放事务带来的延迟。场景应用机房掉电 当用户购买了华为云数据库MySQL,其主库所在的机房掉电,主库挂掉,用户服务被中断时,华为云数据库MySQL凭借高可靠特性可以使服务在秒级内平滑切换到备库,用户可以重新连接上华为云数据库,并且做到服务与中断前的数据视图完全一致,没有任何事务丢失。执行大事务时数据库挂掉 当用户购买的华为云数据库MySQL半同步复制主库正在执行大事务,并且复制状态从同步复制转换到异步复制时,主库突然挂掉,用户服务被迫中断,华为云数据库MySQL主库会在秒级内被拉起对外提供服务,用户可以重新连接上华为云数据库,并且与中断前的数据视图完全一致,没有事务丢失。华为云数据库MySQL半同步复制高可靠特性不仅能够保证事务不丢失, 而且能够保证秒级恢复服务(极端情况下,分钟级恢复服务),从而确保主备数据的一致性,保障企业数据的高可靠,为企业发展保驾护航,同时也是践行华为云数据库致力于打造企业级数据和最强数据底座的有力体现。
-
【前言】Taurus是华为对标AWS Aurora的一款重磅云原生数据库。其设计思想是Log-as-database以最小化网络IO,采用计算存储分离的架构。Taurus的市场定位是OLTP的企业级市场以及高端MySQL客户,但兼顾中小客户。技术路线上兼容MySQL/PG生态,减少客户获取成本,降低风险。本文介绍Taurus数据库产品产生的背景、系统架构以及技术细节。此外,我们还对比了AWS Aurora/Aliyun PolarDB与Taurus的一些特性。相关背景 图1. 第一代云数据库系统架构 在移动互联和物联网等新的应用场景之下,半结构化与非结构化数据例如图片、文本、音频、视频等出现爆炸性增长。传统数据库系统难以应对大数据时代下的存储需求,企业客户迫切需要新的数据库产品,具备动态扩缩容、高吞吐量、低成本等。在云计算技术不断成熟的背景之下,云数据库开始崛起,并因为按需扩展、按需付费等优异特性获得中小企业及互联网客户的青睐。云数据库经历了若干时期的发展,逐渐从托管式服务进化到云原生数据库。云原生数据库在某种程度上颠覆了传统数据库的架构设计。因为云环境基本已经提供相应的高可用功能,而大部分云厂商提供的数据库服务并没有利用这个特性从而错过许多优化空间。以MySQL为例子,如图1所示,数据库系统部署在虚拟机和分布式块存储之上。每个数据库有一个主实例和至少一个只读实例。外部客户通过一个虚拟IP(VIP)访问数据库。当主节点发生故障,云端管理软件会将VIP自动切换至新的主实例。主实例和只读实例都将数据存放在云存储的块设备上。主实例将数据页、保证页面原子性的double write以及redo日志通过文件系统接口写入云存储侧,然后将binlog发送到只读节点。只读节点接收到这些binlog之后写入relaylog,然后回放日志重建数据库副本。回放线程也会将这个过程产生的redo日志,binlog和数据页写到云存储。整个系统可以工作,但是却存在如下几个问题。l 存储空间浪费为了确保数据的可靠性,云存储对于写入的数据一般都是采用3副本存储。所有的数据库实例包括主实例和只读实例都是将数据写入云存储。这种情况下,主实例是3副本存储,其它只读实例也是3副本存储,总共消耗3*(N+1)副本的存储空间,其中N为只读实例的个数。理想情况下,整个数据库系统只需为主实例保留一份数据,只读实例可以共享这份数据,那么可以极大地节省存储空间。l 较大的RTO和数据滞后在现有的RDS部署中,数据库系统的高可用取决于主备之间binlog同步和故障切换协议。在事务提交之前,主机将binlog同步至备机,等待备机的ACK。备机将接收到的binlog进行回放,重建数据库副本。主机发生故障的时候,备机只有将binlog回放完成才能接管系统,对外提供服务。在云环境,MySQL将数据存储在远端的分布式云存储上。数据库日常操作产生的磁盘IO都会转化成网络IO。对比本地存储,云存储的优点在于提供了更大以及更可靠的存储空间。它的主要不足在于延迟较大。这直接影响了备机binlog回放性能。虽然MySQL5.6支持MTS特性,但是一个库只有一个回放线程。在最坏的情况下,需要等待数小时备机才能就绪,对外提供服务。MySQL5.7引入MTS多线程并行回放特性,但是帮助有限,这仍然不能从根本上解决问题。本质上而言,主库的更新压力越大,从库回放日志的时间也就越长,接管系统等待的时长随之增加。因此系统的RTO增大。由于从库需要回放日志来反映主库上的更新,备机回放性能的不足使得主从延迟较大。理想的情况下是,主备共享云端的数据,这可以完全消除备机回放过程和开销,极大地缩小RTO和主从滞后。l 计算资源浪费在现有的RDS部署中,创建备机的主要目的是回放binlog,备机不响应任何的客户端请求。这其中主要的原因是防止查询工作负载影响回放进程。类似地,只读副本系统的回放进程也会影响查询性能。如果备机能够消除回放过程,那么系统的所有计算都可以用来相应用户请求。l 系统性能RDS MySQL主实例将redo日志、binlong和数据页(双写)写入远端的分布式云存储。当系统redo存储空间或缓冲区脏页比例达到阈值,MySQ进行checkpoint操作将脏页写入云存储。对比本地存储,云端较大的写时延制约系统的性能,特别是写入性能。在AWS Aurora纯写测试基准下,现有MySQL RDS的QPS是50~60K,而Aurora能够到达110k。在64个虚拟处理核心下,Aurora甚至能够达到200K的QPS。l 网络带宽消耗在当前的RDS部署中,所有数据库实例都会通过网络将其所有数据写入后端云存储。以master为例,一个MySQL master实例需要写redo日志、binlog和数据页(双写)。对于Aurora纯写测试基准,峰值吞吐量为200 K QPS,这转换为70 M字节/秒的重做日志,但是,写数据页将生成另外700 M字节/秒的流量。对于云存储,所有这些都是多副本存储。这仅对于单个数据库实例。在这种带宽消耗规模下,在相同基础架构上运行的数据库实例数量将会很少。此外还有写入放大、大库支撑不足和从库加入时间较长等问题。Amazon首先意识到上述问题,近年来推出的云数据库Aurora就是为云计算时代而专门定制的一款关系型数据库。其目标主要是最小化网络IO,充分利用云基础设施来提升系统的可扩展性与可用性。Aurora的设计哲学是log is database,对数据的更改只写日志,不刷脏页,极大地简化恢复子系统。Amazon宣称Aurora的RTO最大为2分钟左右;可以在秒级时间内完成故障节点切换与扩容,性能对比MySQL5.6可以优10倍。TaurusDB作为一款cloud native的数据库,设计理念类似AWS Aurora,但青出于蓝而更胜于蓝。TaurusDB不仅针对IO与写操作进行了优化,而且还考虑了读优化,让应用程序可以在缓冲区内以最小的代价获得最新的数据,明显区别于国内厂商(腾讯CynosDB基本完全按照AWS Aurora的设计思路,与TaurusDB原型版本设计思路类似,这里我们把它归为AWS Aurora一类)。TaurusDB针对用户痛点进行了相应的技术革新,对比第一代云数据库其优点相当明显。以下是TaurusDB的架构设计,文章的最后是TaurusDB与其它厂商的对比。 TaurusDB特点 图2. 基于DFV共享存储的TaurusDB架构TaurusDB是华为MySQL RDS经历了云盘时代单机版、Active-Standby主备版和金融高可用一主两备三节点架构版本后,作为华为云自研的最新一代cloud native分布式数据库。它采用华为下一代云存储(DFV)实现弹性扩缩容、高可用和共享存储。如图2所示,系统自顶向下分为3大部分,SQL节点、存储抽象层SAL(Storage Abstract Layer)以及存储节点(storage server)。TaurusDB SQL节点形成一个集群,包括一个主节点和多个只读副本(RO,最多15个)。每个集群属于一个云租户,一个租户可以具有多个集群。SQL节点管理客户端连接,解析SQL请求,生成查询执行计划,执行查询以及管理事务隔离。主节点和只读副本之间的通信流量很小,主要交换一些状态信息(DDL更新、slice/pages分配更新和活跃事务列表、只读副本中最旧的读取视图、副本最小LSN)。在故障切换期间,任何只读副本都可以接管集群。只有主SQL节点负责数据库更新和DDL操作,而只读副本处理数据库只读查询,并为客户端提供可重复读(RR)和读已提交(RC)隔离级别。如图2所示,SAL(存储抽象层)是SQL节点和存储层之间的桥接器。SAL包括两个主要组件,SAL SQL模块和DFV存储节点内部的Slice存储。SAL SQL模块为SQL节点(主/只读副本)提供了SAL API,用以与底层存储系统进行交互。如图3所示, SAL SQL模块包含通用日志处理器CLP(Common Log Processor)、数据库分片管理器SM(Slice Manager)、页面读取器PR(Page Reader)以及与只读副本节点同步信息的工具程序。CLP负责将数据库全局重做日志持久到DFV,解析日志并将其分发到相应的DFV分片,并生成同步消息(脏页,活动事务列表,分片持久LSN等)以供只读副本获取。CLP还需要处理数据库崩溃恢复,重新加载已提交的全局重做日志并将其重新分配给所有相应的分片。SM维护分片策略以及页面映射信息,确定何时添加更多的分片以及哪些数据库页面应分配给哪个DFV切片等。页面读取器负责通过查找页面映射信息将特定的页面读取请求路由到相应的切片管理器。SAL SQL模块还为SQL节点与存储系统交互提供了其他一些接口,包括定期将日志清除信息(RecycleLSN)传递到数据库片等。 图3. SAL-SQL包含的主要模块Slice Store是在DFV存储节点内部运行的插件模块。它需要与DFV存储框架一起使用,用以在相同DFV节点上管理多个数据库片,支持多租户资源共享,并将页面的多个版本提供给SQL节点。如图4所示,对于每个分片,slice Store使用日志目录作为中心组件来管理重做日志和页面数据。Slice store的主要职责是1) 接收分片重做日志,将其持久化并注册到日志目录中;2)接收页面阅读请求并构建特定版本的页面;3)垃圾回收和合并日志。 图4.slice store组件TaurusDB存储层建立在华为云存储DFV持久层之上。DFV持久层为上层SQL节点存储提供读写接口,提供跨地域3AZs之间的数据强一致性和可靠性保证。 TaurusDB使用两种模式实现write-optimized以及read-optimized,分别是PLOG模式与iShard模式。PLOG模式提供强一致性保证,而iShard模式实现最终的一致性。TaurusDB SQL节点使用PLOG模式存储整个数据库的WAL重做日志,使用iShard模式对数据在多个存储节点之间进行分片和管理。PLOG以SSD友好的追加写方式使事务提交更快;iShard将redo以页面为单位进行聚合,管理数据分片,实现快速数据读取,并支持超大型数据库(128 TB)。存储层支持多个TaurusDB集群实例,单个存储节点支持多租户数据库分片。部署灵活,可以将PLOG和iShard部署在单独的存储池中或共享同一存储池。在这种体系架构下,整个数据库集群只需一份足够可靠的数据库副本集,极大地节约成本。所有只读副本共享在云存储中的数据,去除数据库层的复制逻辑。一写多读,没有独立的备用实例。主节点发生故障,集群进行切换操作时,只读副本都可以切换为主节点,接管集群服务。为了节省宝贵的网络带宽,只有数据库日志通过网络从数据库计算节点写入 DFV 存储层,没有脏页、逻辑日志和双写的流量。基于 DFV 存储层内的数据库日志重构数据面,独立于上层的计算节点,实现存储和计算分离。为了应对大数据存储需求,TaurusDB利用DFV的切片策略对数据库进行自动分区,对应用透明。单个DFV存储节点可以管理来自不同数据库集群实例的多个分片,实现存储容量无限扩展。TaurusDB的设计中,充分使用了异步线程、批量IO以及流水线工作模式实现写入高性能。这对于有大量写入需求的场景,例如物联网是相当合适的。通过在存储层内嵌数据库插件可以快速读取所需的数据。从这一角度上来说,TaurusDB是一个write-optimized以及read-optimized的数据库系统。总的来说,TaurusDB具有以下的优点:1. 节省资源如上所述,TaurusDB只需一份足够可靠的数据库副本集。所有只读副本共享云存储中的数据。添加只读节点时,只需添加计算节点,无需额外购买存储。只读节点越多,节省的存储成本越多。另外一个值得注意的地方就是数据库去除了复制逻辑,对比主备高可用架构这在一定程度上了节省了网络流量,提升计算节点效率。总体而言,在成本开销上,TaurusDB提供企业级的服务能力,但只有1/10商用数据库的成本。2. 便捷扩展性与高可靠性在第一代云数据库的主从架构下,添加只读时需要拷贝数据,重放 binlog,这要求备库完整地执行一次查询请求,在大数据量情况下速度很慢,尤其是对于采用本地盘方案。主从复制延迟问题会影响主备切换,无法保证 RTO,影响SLA。此外,备份恢复速度很慢,TB级的数据量通常需要耗费数小时,使得数据库扩展性严重受限。对比传统的逻辑复制,物理复制则没有上述缺点。因为物理复制只需在日志指定的存储位置上恢复/应用数据的前置镜像/后置镜像即可,完全跳过了查询执行过程。TaurusDB采用物理复制,减少IO操作的同时,让复制更加可靠、高效,并且几乎不会对性能造成影响。由此带来秒级主备切换、快速动态的读扩展和故障恢复。TaurusDB最高支持扩展到15个只读节点。虽然TaurusDB使用了物理复制,但是基于客户在数据分析和传输上需要Binlog,我们也支持Binlog进行数据同步。得益于底层强一致分布式文件系统DFV的支撑以及TaurusDB架构在数据访问上的设计,TaurusDB支持跨AZ部署,跨region容灾,实现单点故障0中断,满足金融级别可靠性。3. 高性能TaurusDB包含MySQL 8.0的所有重要功能,还在其基础之上进行了大量的优化,例如针对硬件特性的适配与大并发下的优化。TaurusDB对封锁子系统进行了分区,减少了锁表的竞争,并行化死锁检测;在事务子系统上采用Lock-Free数据结构来管理事务子系统的活跃事务列表。除此之外,引入内核特性,例如Query result cache,Query plan cache,Online DDL等提升用户体验。相比于TaurusDB1.0版本,TaurusDB2.0版本在性能表现上有了显著提升,在关键情况下都有了数倍的改进。对比MySQL 8.0的官方版本,TaurusDB2.0的优化改进所带来的效果也非常明显,尤其是物理复制方面具有显著的优势。在纯写情况下,TaurusDB2.0的性能可以比官方MySQL8.0高7倍以上。4. 强悍的备份恢复支撑TaurusDB 引擎采用定制的新一代分布式存储系统DFV,极大提升了数据备份、恢复性能。DFV持久层集群包括多个存储节点。每个存储节点包含多个SSD设备和适应SSD介质的append存储服务进程,提供AppendOnly vs. WriteInPlace的数据写入模式。DFV将数据按多时间点多副本存储,支持海量快照和快照秒级生成。在这种能力支撑之下,基于底层存储系统的多时间点模式,TaurusDB不需增量日志回放,可直接实现按时间点回滚,轻松支持PITR(Point-In-Time-Recovery)特性。TaurusDB将特定计算任务(备份与恢复逻辑)下推到DFV,以便更高效,快速地实现备份、恢复,而上层计算节点专注于业务逻辑处理。在这种模式之下,客户可以通过本地访问数据并直接与第三方存储系统交互,高并发高性能。通过异步数据拷贝外加按需实时数据加载机制, TaurusDB 可在数分钟内达到完整功能可用,实现快速实例恢复。横向比较 TaurusDB 的共享存储架构将数据持久化放入新一代存储中,充分保障数据强一致性和 0 丢失;针对硬件定制上层系统,充分利用 RDMA 网络、NVME SSD 等硬件优势,在这些关键技术上整合创新,使得 TaurusDB 的性能有了质的飞跃。对比目前业界的同类型产品,AWS Aurora和阿里的PoloarDB,TaurusDB的纯写性能方面要优30%左右。从阿里云对外公布的技术资料分析,PolarDB仍然需要将数据页写入存储侧,对数据进行SSD不友好的update-in-place操作。相比Aurora,PolarDB在体系结构上进行了一些创新,例如与数据库交互的IO设计、与现代硬件的适配等。腾讯的CynosDB则基本上参照AWS的Aurora进行设计,也沿用了很多系统概念例如数据段一致LSN(SCL),MTR完全点(CPL),最大存储卷MTR完全点(VDL)等。TaurusDB为了应用程序能够在计算节点以最小代价读到最新的数据,另辟蹊径对系统架构进行了不同层面的思考。利用CLP组件实现快速事务提交,利用slice store达到读优化的目的。在这点上,TaurusDB跟SAP HANA的设计思路有类似之处,数据在系统不同阶段有不同的作用。SAP HANA中,数据从行存储形态逐渐转化成列存储,从写优化向读优化演变;而TaurusDB中,日志从开始阶段的写优化通过compact操作向读优化演进。日志兼顾保证系统的持久性与效率。在不同的时期,日志的作用不同。系统恢复阶段,日志通过回放将系统恢复到最新一致性状态;在系统正常运行阶段,日志通过回放将系统最新数据提供给应用程序。并且得益于对多版本数据的剪枝(页面解析plug-in),计算节点可以以最小的代价从存储节点获得最新数据,无需RDMA网络的支撑即可高效完成。这也是TaurusDB能够顺利实现跨AZ部署,跨region容灾的关键点。表一是从用户较关心的角度出发,对TaurusDB,AWS Aurora以及阿里PolarDB“三驾马车”的横向对比。文章的最后,欢迎对taurus感兴趣的技术人员加入我们一起挑战技术巅峰,长风破浪,直挂云帆济沧海!简历发送至zhuyuean@huawei.com 表一 TaurusDB VS. PolarDB VS.Aurora RPO (PITR)RTO MySQL/PG兼容 系统纯写性能比率 支持跨AZ 只写logTaurusDBY <=30sec Y 1 Y Y阿里PolarDBY >=1min Y 0.7 N NAWS AuroraY <=30sec Y 0.7 Y Y
-
这个春节因为肺炎疫情的严峻,很多企业都实行了“在家办公”的工作模式,如何让在家办公变得安全轻松?华为云数据库携手WeLink(远程协作办公软件)共同保障企业在云上办公的数据稳定可靠,助力企业高效轻松办公。华为云WeLink智能工作平台提供IM、会议、办公等三大服务,春节期间新增企业数数十万,新增日活用户数超100万,业务流量增长50倍,单个企业最大会议方数760方,参会人员遍布国内230个城市。办公变得更轻松高效。华为云数据库具备便携安全的迁移和高级运维能力,疫情期间特别推出了免费专区活动,那么,华为云数据库是如何助力企业云上办公的呢?高稳定:支持TB级数据,轻松应对海量访问云上办公面临海量企业和用户同时涌入和远程办公的挑战,对网络要求较高,如何让企业稳定持续办公是每个远程协作办公软件必须思考的问题,而华为云WeLink借助华为云数据库MySQL的高稳定性,轻松解决了这个问题。华为云MySQL采用高可用主备架构,支持跨可用区部署主备实例,主备秒级自动切换,提供更低的RTO保证。同时支持在线扩展只读负载和存储容量扩容,一键规格变更实现CPU内存扩容和缩容,在高并发的大量连接下,提供更快速的响应,有效助力华为云WeLink提供百万级高并发和TB级数据,轻松应对访问压力。高可靠:数据一键备份恢复,支持跨AZ部署数据可靠是企业极为关注的问题,也是华为云WeLink十分重视的问题。WeLink服务使用华为云数据库MySQL作为核心数据库,数据基于云盘三副本保存,提供了极高的数据可靠性,无需担心硬件损坏导致数据丢失,华为云数据库MySQL自研的增强半同步协议,在保证主备高可用的同时确保数据不丢不漏,成功助力华为云WeLink IM服务(如群聊、即时消息等)的高可靠,让用户的沟通更及时高效。同时华为云文档数据库服务DDS采用副本集和分片集群两种高可用架构,数据自动备份,支持跨AZ部署,容灾能力强,具备一键恢复功能,有效防范误操作,在华为云WeLink 小微助手和投票系统中都发挥了重要作用。高安全:多层防护体系为数据安全保驾护航云上数据安全防护一样不能少,华为云WeLink凭借华为云数据库的高安全性,切实保障企业客户数据的安全。华为云数据库通过工信部可信云认证,采用安全组、VPC、DDOS防护以及SSL安全访问等多层技术严格控制访问,具备安全事后审计功能,可有效抵御网络攻击,配合数据库安全服务DBSS提供敏感数据发现、数据脱敏、数据库审计和防注入攻击等功能,共同为企业数据安全保驾护航。华为云数据库提供高稳定、高可靠、高安全的云上数据库服务,全力支撑华为云WeLink云上办公的高效便捷,致力为广大企业用户提供一个安全、开放、智能的办公服务平台数据底座,有效保障企业云上办公的数据稳定可靠,使您在家MySQL与DDS免费试用2个月,更多活动详情请戳:https://activity.huaweicloud.com/free_test/index.html华为开发者大会2020(Cloud)是华为面向ICT(信息与通信)领域全球开发者的年度顶级旗舰活动。大会旨在搭建一个全球性的交流和实践平台,开放华为30年积累的ICT技术和能力,以“鲲鹏+昇腾”硬核双引擎,为开发者提供澎湃动力,改变世界,变不可能为可能。我们期待与你共创计算新时代在一起,梦飞扬!
-
年关将至,云数据库新年狂欢火热来袭,新用户仅需10元即可畅享爆款云数据库,首购专享1年低至3折,新年新购1年75折,3年45折,包年购买数据库产品即免费赠送数据库安全服务DBSS一个月使用时长。还可免费体验新品GeminiDB for Cassandra,优惠多多,惊喜连连,快来寻找属于你的云数据库专“鼠”优惠吧!
-
华为云数据库MySQL提供一键开通读写分离功能,只需要一个连接地址,让您在业务高峰期不再迷茫,不再慌乱,轻松应对业务需求。什么是读写分离?读写分离是指通过一个读写分离的连接地址实现读写请求的自动转发。通过RDS的读写分离连接地址,写请求自动访问主实例,读请求按照读权重设置自动访问各个只读实例。什么时候使用读写分离?在对数据库有少量写请求,但有大量读请求的应用场景下,单个实例可能无法抵抗读取压力,甚至对主业务产生影响。为了实现读取能力的弹性扩展,分担数据库压力,您可以在某个区域中创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求,以此增加应用的吞吐量。开通读写分离功能注意: 您拥有主备实例4U8G以上,1个只读实例即可开通读写分离功能。1. 登录管理控制台。2. 单击管理控制台左上角的,选择区域和项目。3. 选择“数据库 > 云数据库 RDS”。进入云数据库 RDS信息页面。4. 在实例列表中,单击目标实例的名称,进入实例的“基本信息”页面。5. 在左侧导航栏中,单击“读写分离”。您还可以在实例的“基本信息”页面,单击“连接信息”模块“读写分离地址”后的“申请”,跳转到“读写分离”页面。通过读写分离地址,可以快速实现读写分离访问,简单、高效、便携。如何设置阈值和权重开通读写分离功能后,您可以根据需要设置读写分离的延迟阈值和读权重分配。延时阈值只读实例同步主实例数据时允许的最长延迟时间。为避免只读实例读取的数据长时间和主实例不一致,当一个只读实例的延迟时间超过设置的延迟阈值,则不论该只读实例的读权重是多少,读请求都不会转发至该只读实例。读写分离功能成功开启后,延时阈值默认为30s,阈值默认范围为0~7200s,建议该阈值不小于30s,超出阈值的只读实例不分配流量。读权重分配读写分离功能成功开启后,主实例的读权重默认为0,可以修改;只读实例可以设置读权重。实例的读权重越高,处理的读请求越多。例如,假设主实例有4个只读实例,实例的读权重分别为0、100、200、500、300,则表示主实例不处理读请求(写请求仍然自动发往主实例),四个只读实例按照1:2:5:3的比例处理读请求。开通读写分离功能后,系统将根据只读实例的规格默认分配权重,后续新增只读实例也将按照默认规则分配权重。华为云数据库一键开通读写分离功能后,还可以快速弹性扩展,几分钟便可以完成只读实例的添加,且最多可以增加10个只读实例。轻松应对各类业务场景,助力企业服务创新升级。了解更多,请戳我...
-
尊敬华为云客户:华为云计划于2019/12/31 00:00:00(北京时间)将云数据库 GaussDB T产品正式转商用。服务正式商用后,将于2019/12/31 00:00(北京时间)正式开始收费,计费模式为包周期和按需计费。华为云在此提醒您,如果您不再需要使用该服务,请及时删除资源,以免产生费用。更多关于GaussDB T的产品介绍,请您点击了解。如您有任何问题,可随时通过工单或者服务热线(4000-955-988或950808)与我们联系。感谢您对华为云的支持!
-
2018年底,IDC首次在报告中提出了“数字原生”的概念。数字原生企业指的就是原生于数字化的企业,多以互联网公司为主,与此对应的传统企业就是非数字原生企业。 如果从云的视角来看,数字原生企业绝大多数都是云原生企业,它们通过建立在云原生架构上的竞争优势,收获了快速的成长。大量的传统企业也在学习互联网的经验,但它们自身并非原生于云,要如何去获得云原生的能力? 所以,又出现了数字重生的概念,传统企业通过云服务商,利用云原生的技术,嫁接传统创业,让沉寂的数据活起来,让固化的业务动起来。 云数据库,就是在这样的背景下,成为企业盘活业务数据最关键的一环。11月,IDC发布的《中国公有云服务市场(2019上半年)跟踪》报告显示:在2019年第二季度IaaS市场份额中,华为云首度超越了AWS,增速高达368%,同时在IaaS+PaaS整体市场份额营收增速同样超过350%,位于全国第一。 这俨然已经是一个未来超级云服务商的雏形,超级云必有超级云数据库。华为云数据库是如何成为企业客户的首选的?云数据库是企业上云的必然选项作为三大基础软件技术之一的数据库,是企业IT系统必不可少的核心技术。随着云数据库的崛起,也造成了商业数据库市场份额逐年下降,根据第三方机构预测,到2021年,商业数据库市场还会下降20%以上。Gartner则预测,到2023年全球3/4的数据库都会跑在云上。云数据库的市场曲线之所以会逐渐走强,这与企业全面上云的发展趋势是密不可分的。当企业的核心系统逐渐上云,传统数据库的弊端将会一览无遗,云数据库就会成为企业匹配云时代的最佳选择。 相比传统数据库,云数据库不仅天然拥有云计算的弹性能力,还具备开源数据库的简洁易用和开放生态,以及传统数据库的SQL管理和处理性能等各方面的优势,在云环境下能够为用户提供更好的数据库服务。 但是云数据库也并非是完美无缺的选择。比如,企业搭建的传统商业数据库通常承载了ERP、CRM、OA等一系列系统,而数据模型也是基于原有系统开发,如果没有与之兼容的云数据库,上云几乎要重写代码。 再者,业界也有多种多样的云数据库,其中大部分都经开源数据库的修改而来,真正拥有核心技术的云数据库并不多,对企业客户来说,华为云这一年来的表现已经证明,它就是企业客户首选的云数据库服务商。云数据库是企业客户的最佳匹配为什么说,华为云数据库是企业的最佳匹配? 第一,不同的行业对数据库的诉求是不同的。例如金融的客户,会要求数据库的强一致性,数据是不能丢失的;而电商的客户会要求数据库有瞬间支撑高并发的能力。还有些客户则要求能够直接在云上进行数据的快速移动和搬迁。华为云数据库的技术有深厚的研发沉淀。早在2001年,华为就开始布局数据库研发。华为云数据库是基于华为多年来在数据库领域的研发经验积累而来。无论是下一代关系型数据库TaurusDB还是国内首款多模数据库GeminiDB,都是出自华为的自研。这种自研的能力和底蕴,是一般云服务商所不具备的。 第二,没有完全一模一样的企业,也不存在适合所有企业需求的云数据库。尤其在混合多云的时代,对企业来说,多样化的云数据库,能够更好地满足业务迁移和运行的需要。 那么,华为云数据库服务体系堪称是业界最完整的体系。比如最新一代企业级分布式数据库TaurusDB,它是第一个基于MySQL 8. 0 开发的高性能云原生分布式数据库。在保持100%的开源兼容性的基础上,利用了新的存储技术,并提供多租户支持,支持 1 写 15 读,性能达到原生 MySQL 的7 倍。再比如华为自主研发的计算存储分离架构的分布式多模NoSQL数据库服务:云数据库GeminiDB。它在华为云高性能、高可用、高可靠、高安全、可弹性伸缩的基础上,提供了一键部署、备份恢复、监控报警等服务能力。其中,华为云GeminiDB for Cassandra已于12月6日正式商用。第三,数据是企业的核心价值,云数据库涉及到复杂的工程,既要稳定不出错,还需要平移顺滑,让用户在业务不停顿的前提下,感知不到迁移的过程。 这个方面,我们可以从具体的用户案例中看到华为云的实力。锦江都城公司为了提升业务效率,选择将业务迁上华为云。对于任何一家接入了PMS系统的酒店来说,数据库的作用都是至关重要的。若底层数据库能够确保支持最新的PMS系统,就能很大程度避免数据处理方面的困难,令业务更易于管理。在这个案例中,华为云仅用1小时就完成数据迁移和PMS系统数据库升级,令其业务运行效率得到明显提升。 第四,此前企业对上云讳莫如深的根本原因还在于对数据安全存在担忧。尤其是对政企和银行等大行业用户,数据库迁移过程中,如何保证安全是他们的一个重要考量。 在数据安全的层面,华为云承诺充分尊重客户的数据主权,不会使用客户数据进行变现。我们也知道,这一直正是华为云的边界,做技术赋能的“黑土地”的初心。 综合以上几点,我们有理由相信华为云数据库就是企业客户的最佳选择。成为超级云数据库服务商华为云的这一年2019年,是华为云数据库快速成长的一年。一年来,华为云数据库已上线10款服务,推出3款新品,新增功能40余个,提出两大技术解决方案,荣获5项创新大奖,聚焦金融、互联网、车企、物联网、游戏、ISV等6大行业,提供全套云上数据库解决方案。从这些产品及服务,我们也可以看到华为云数据库独特的能力。第一,相比互联网流派的云服务商,华为云更理解企业客户的需求,同时具备云上技术能力和云下服务能力。从很多客户案例,我们都发现企业客户对上云迁移是需要技术与服务结合,需要更理解需求的服务商,帮助他们梳理好业务的规范,这是华为云得天独厚的优势。 针对企业客户的具体需求,华为云数据库也做了多项技术升级。 比如,在今年8月,华为云数据库MySQL新增了一键开通读写分离功能,可以专业应对企业业务高峰情景,助力企业业务升级。目前,华为云数据库一键开通读写分离后,还可以快速弹性扩展,几分钟便可完成只读实例添加,且最多可以增加10个,轻松应对各类高峰场景,助力企业业务创新升级。再有今年9月,华为云数据复制服务DRS新推出了一款功能——密码在线迁移,一键式克隆迁移源数据库密码,包括用户和权限都能一键迁移过去,且操作简便灵活,极大减轻了DBA繁重的运维工作。这不仅是业界首家研发,可兼容主流云厂商产品,更是DBA的福音。 对企业客户来说,灾备就是企业信息安全的最后一道防线,守住防线,就是守住了企业未来发展的命运。所以今年11月,华为云发布了MySQL云灾备解决方案。有了华为云DRS提供的秒级灾备能力和内部五大核心技术的加持,企业数据的最后一道防线被牢牢守住。 第二,华为云数据库拥有出色的技术和产品能力,通过多年数据库领域的持续创新探索经验,打造了业界领先的面向企业级的产品与方案矩阵。 比如今年7月,DRS支持MySQL迁移时限速功能重磅上线,该功能让用户轻松把控迁移对源带宽、数据库IO的影响。使用DRS限速功能,可以让迁移对源业务高峰期性能影响最小化;搭配全量+增量迁移,可以让数据库迁移时,源业务不停机,有效的降低业务中断时间,让用户更专注业务发展。 今年8月,华为云DAS2.0全新升级,集自动化智能化于一体,新增多项数据库运维、智能诊断功能,大幅度提高开发效率,助力技术人员实现便捷的数据库客户端管理,让数据管理变得高效、安全、简单;今年9月,华为云DAS新出了一个功能——数据追踪与回滚,提供多重变更审计,保护核心数据安全;一键回退错误操作,快速找回数据。 第三,华为云尊重开源的成就,并积极拥抱开源。一直以来,华为云都在基于开源数据库成熟的社区来打造建设华为云自己的社区,拥抱开源社区并结合华为多年来积累的企业级技术实力和基因,打造企业级数据库整体生态。 社区建设,华为云一直是认真的。今年10月,DDS社区版新增了审计日志、库表级时间点恢复、兼容MongoDB4.0版本三大价值特性,功能更完善,性能进一步提升。社区版的发布,可以帮助企业更好更快地上云。而在行业方面,今年11月,华为云数据库MySQL金融版正式商业化发布。如今,华为云数据库MySQL金融版不仅可以满足各种金融场景(包含银行、证券、保险等行业),对数据高可靠、高可用有同样要求的大中型企业核心数据库场景也非常适用。 第四,与合作伙伴生态形成完整的企业服务闭环,让企业数据上云迁移省心省力。 例如赛云数据,从传统Oracle数据库切换到华为云数据库,要求数据不丢失、不影响业务、工作量最小。华为云数据库多番思量给出的解决方案是:左手PostgreSQL增强版(简称PG增强版),右手数据复制服务DRS,左右手共同发力,把控每一个细节,真正做到让数据无处可逃。 而奥格智能同样选择牵手华为云,将原先Oracle数据库上的数据全部搬迁到华为云上,并共同构建了一套“智慧雨洪管理”解决方案。一套PostgreSQL增强版高度兼容Oracle数据库,同时搭配华为云数据复制服务DRS,将Oracle数据库的数据原封不动地迁移至PG增强版,不给数据开溜机会。 总体而言,传统企业迈向数字重生的脚步不会停歇,企业上云仍然是大势所趋,云数据库作为上云的最核心的业务转移,选择华为云,绝不会错。文/郑凯
-
近日,华为云高校行校园分享会走进云南大学,华为云AI 、IoT、数据库等业务团队与云大师生进行深度交流。其中,华为云数据库团队向现场师生详细介绍了华为云数据库服务及行业解决方案,并以实操体验形式让同学们快速熟悉云数据库产品。华为云高校行云南大学分享会现场分享与交流并进,引发兴趣和热议华为云数据库布道师详细介绍了云数据库服务全景,从关系型数据库、NoSQL数据库以及数据库生态服务三个维度给同学们普及云数据库的知识,并重点介绍了云数据库的明星产品GeminiDB和TaurusDB,引发同学们的广泛热议和思考。华为云数据库布道师就互联网、游戏、车联网等行业,对不同场景下华为云数据库所能提供的高安全、高性能、高可靠的解决方案做了深入介绍,并结合具体案例分析,让同学们更好地了解云数据库服务的优势所在。华为云数据库布道师主题演讲现场实操体验,云数据库课堂爆满为了让同学们进一步了解华为云数据库服务,华为云数据库团队还精心设计了实操体验环节,策划了基于Python与云数据库的爬虫应用实践,并提供了示例代码和指导文档,让同学们即使零基础也可以轻松搭建属于自己的云数据库爬虫应用,帮助同学们充分了解华为云数据库的黑科技力量,体验科技带来的无限魅力。华为云数据库团队现场指导和解答华为云数据库团队以学生为视角,精心设计的活动实践题目深受学生欢迎,云数据库实践课堂爆满。同学们情绪高涨,现场讨论气氛浓烈,并引来云南大学信息学院院长前来视察,检验同学们的动手实践成果。华为云数据库团队积极与学生交流沟通,为其答疑解惑,同时,同学们获益匪浅,觉得通过此次实践感受到了华为云数据库的力量所在,还有同学表示回去要好好钻研下该实践内容,对示例代码进行进一步的突破和改进。 产学研互助,共探新工科人才培养模式活动还增设了圆桌会议环节,华为云专家与高校教师就课程合作及研讨进行了深度交流,双方在合作研讨方面达成了共识。华为云数据库在2020年也将会借助华为云交流平台与高校师生进行互动交流、内容共享、项目实践等方式,帮助高校师生在云数据库领域进行学习和创新,也为高校科技人才培养,提供最诚挚和优质的业界支持。科技的前进离不开人才的推动和各方资源的影响,华为云数据库用专业与学术交流拉近与学生的距离,用实操体验激发学生的技术乐趣和思考,用自己独特的方式培养和孵化各种新科技人才。重磅活动推荐华为开发者大会HDC.Cloud是华为面向ICT(信息与通信)领域全球开发者的年度顶级旗舰活动。大会旨在搭建一个全球性的交流和实践平台,开放华为30年积累的ICT技术和能力,以“鲲鹏+昇腾”硬核双引擎,为开发者提供澎湃动力,改变世界,变不可能为可能。我们期待与你在一起,梦飞扬!
-
云数据库GeminiDB是一款基于华为自主研发的计算存储分离架构的分布式多模NoSQL数据库服务。在华为云高性能、高可用、高可靠、高安全、可弹性伸缩的基础上,提供了一键部署、备份恢复、监控报警等服务能力。高度兼容Cassandra、MongoDB、Redis、InfluxDB四款NoSQL接口,并提供高读写性能,具有高性价比,适用于IoT、气象、互联网、游戏等领域。其中,华为云GeminiDB for Cassandra已于12月6日正式商用。Cassandra是一套开源分布式NoSQL数据库系统,具有良好的可扩展性和高写入性能,广受业界欢迎。但同时它也存在一些不容忽视的问题,如大规模集群扩容慢、集群不稳定等。为了解决上述问题以满足客户日益增长的需求,华为云数据库团队精心研发出GeminiDB for Cassandra,高度兼容Cassandra协议,在读写、扩容能力等方面相比社区版具有质的突破,具有超高性价比。一起来认识一下GeminiDB for CassandraGeminiDB for Cassandra是一款基于华为新一代计算存储分离架构研发的云数据库,提供宽列存储接口,高度兼容Cassandra协议,拥有超强写入性能,同时相比社区版具有分钟级计算扩容、秒级存储扩容、数据强一致等优势,性能更强更稳定,数据更可靠,扩容更敏捷,适用于IoT、实时推荐、金融反欺诈检测等场景。GeminiDB for Cassandra牛在哪?高可靠:企业级数据可靠性GeminiDB for Cassandra支持N-1个节点故障容忍,提供10倍以上的故障重构性能和备份恢复性能,保障数据强一致,提供企业级的数据可靠性。高扩展:秒级扩容,快速更神速GeminiDB for Cassandra把多副本策略下沉到共享存储,大幅提升弹性伸缩能力,实现分钟级计算扩容和秒级存储扩容,单实例支持海量数据存储,支持节点级的监控告警,让用户可以放心托管数据库,助力用户轻松应对项目高峰期。高性能:超高写入,读性能数倍提升GeminiDB for Cassandra在超强写入性能的基础上,通过优化存储引擎,实现了数倍读性能提升,拓宽了使用场景的外延,使其不仅仅适用于写密集型的业务场景,在读密集的场景中也具备了强竞争优势。高安全:构筑多层保护,为数据安全保驾护航GeminiDB for Cassandra通过VPC、子网、安全组、DDoS防护以及SSL安全访问等多层安全防护体系,帮助用户抵御网络攻击,让用户上云无忧。适用多种场景工业制造&气象业GeminiDB for Cassandra基于计算存储分离架构,具有超强的高并发写入性能,适用于工业制造和气象业海量数据存储的场景。互联网GeminiDB for Cassandra具备高并发写入性能和高可扩展性,保障集群高可用和业务连续稳定性,非常适用于写入规模量较大的互联网大数据场景,如记录大规模的用户行为数据等。购买敬请移步华为云官网:https://www.huaweicloud.com/product/geminidb.html?utm_source=wechat&utm_medium=officialaccount&utm_campaign=gemi_1120&utm_content=sjk_gd目前,华为云开发者大会HDC.Cloud已开始报名,2020年2月4日前限时享受早鸟票价,快来参与这场技术人的潮流盛会吧,报名请点击下方链接。https://www.huaweicloud.com/HDC.Cloud.html
-
Hello,朋友们,距离华为云双11血拼风暴已过去了一个月,你们是否以最优惠的价格买到自己最心仪的服务呢?小编在后台看到留言:错过双11年度大促,忧愁无处诉说怎么办?双11剁手没过瘾,想再买一些贴心又实惠的云服务还有吗?你们的诉求小编已经安排上了,华为云数据库双12年终钜惠即日开启,爆款云数据库MySQL1年3折起,全产品新购3年4.5折,续费8折起,还有8888元的会员专享豪华礼包等你来领,详情请看下面的购买攻略,机不可失,错过再等一整年,快来抢购吧!
-
2019年,华为云数据库已上线10款服务,推出3款新品,新增功能40+个,提出2大技术解决方案,荣获4项创新大奖,聚焦金融、互联网等6大行业提供全套云上数据库解决方案。我们知道,凡是过往,皆为序章,2020年的华为云数据库会更优秀。 更多详情请点击:关系型数据库-MySQL华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景华为云MySQL金融版正式商用,高可靠的金融级数据库来了安全性能两手抓,华为云MySQL“非双一特性”助力企业业务稳定高效运行NOSQL数据库-文档数据库服务DDS慢日志新体验!华为云DDS慢日志支持明文显示轻松识别数据华为云DDS服务携三大价值特性助力企业云服务更上一层楼数据库生态-数据复制服务DRSDRS 支持 MySQL 迁移时限速功能全新上线业内首家密码迁移丨华为云DRS一键式迁移用户、密码和权限华为云MySQL云灾备解决方案发布,放心的数据库都有异地保护数据库生态-数据管理服务DAS全新升级!华为云DAS2.0版本来袭新功能初探丨华为云DAS数据追踪与回滚新技术解决方案-最佳客户实践现在流行不务正业吗?这里有一个不管家的管家婆健康生活的背后有赛默飞世尔,那TA的背后还有谁?为什么别人家的房子就盖得那么快?不怕流量暴走! 华为云&开天创世给你畅快游戏体验快准稳!华为云助力锦江都城1小时完成数据迁移赛云数据&华为云,安全性能两手抓,数据搬“家”再也不用愁不给城市“添堵”,奥格智能&华为云来支招目前,华为云开发者大会HDC.Cloud已开始报名,2月4日前可限时享受早鸟票价,报名请戳:https://www.huaweicloud.com/HDC2020.html
GaussDB数据库
发表于2019-12-12 14:48:40
2019-12-12 14:48:40
最后回复
Huaweiyun Abby
2020-04-21 17:16:22
31016 5 -
有这么一群人,他们名为开发者内心盛满改变世界的力量他们,熟练使用编程编织快意人生他们,执着地用代码丈量广阔天地他们,单纯而热烈,勇敢而坚强他们,眼底有光,心里有梦HDC.Cloud,倾心搭建开发者追梦平台让开发者们尽情释放无限可能给其所想,助其圆梦HDC.Cloud云数据库最新资讯现场实操体验:展区展示最新数据库前沿技术和明星产品,现场开设小课堂和Codelabs现场体验抢先了解黑科技:两大自研分布式数据库TaurusDB和GeminiDB的技术突破和最佳实践。真实案例分享:开发者现身说法,分享云数据库在千行百业的创新与应用。大咖交流:业界顶级大咖和华为云数据库技术专家现身数据库session专场,技术探讨,与开发者一起交流经验。华为云数据库打造云上数据最佳使用平台,为千行百业提供一站式服务,开启数据库极速、融合时代。大会简介华为开发者大会HDC.Cloud是华为面向ICT(信息与通信)领域全球开发者的年度顶级旗舰活动。大会旨在搭建一个全球性的交流和实践平台,开放华为30年积累的ICT技术和能力,以“鲲鹏+昇腾”硬核双引擎,为开发者提供澎湃动力,改变世界,变不可能为可能。来吧,一起变不可能为可能我们期待与你在一起,梦飞扬报名猛戳:https://www.huaweicloud.com/HDC2020.html
上滑加载中
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签