【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

作者:阿里云用户蓝色之鹰

一、OTS简单介绍

OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实时访问。NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。OTS应用程序可以使用阿里云官方发布的OTS SDK 来访问OTS,也可以通过POST 方法发送HTTP 请求来访问OTS。

关于http请求访问请参考API

本文将介绍SDK访问OTS。

二、准备工作

1、结构化数据服务 OTS 公测资格申请;参见OTS申请流程

2、SDK下载;

Java SDK下载地址:

http://oss.aliyuncs.com/aliyun_portal_storage/help/ots/aliyun-openservices-OTS-2.0.4.zip?spm=5176.383723.9.10.yXCDUV&file=aliyun-openservices-OTS-2.0.4.zip

OSS和OTS SDK可实现maven中央库调用(2012年10月10日起实现)

Open Services SDK for Java包含了OSS和OTS的SDK,之前一直只在阿里云官方网站上以zip包的形式提供下载链接。用户只能手动下载使用。但在Java世界里,maven已经成为开发者依赖的代码库管理工具,将SDK发布到maven中央库可以方便开发者使用我们的SDK。现在SDK已经在Maven中央库发布成功!今后开发者可以直接在其项目中使用maven -> add dependency来引用我们的SDK了。

3、Access Key创建

三、安装部署

本人使用的IDE是MyEclipse,这个随便找自己习惯的IDE

  1. SDK包结构

需要说下的是,这个SDK包里默认包含了OTS和OSS;安装和使用基本上都差不多,有兴趣的同学,可以都体验下!

2、引入工程

代码:将examples下的com目录拷贝到项目Src下

JAR包:将aliyun-openservices-OTS-2.0.4.jar和lib目录下的jar包引入工程;

3、编码设置

将项目编码设置为:UTF-8

4、目录展示

四、测试使用

  1. 创建实例

登录阿里管理控制台,进入OTS管理控制台创建实例

2、修改参数

测试类:OTSSingleDataSample

  1. public static void main(String args[]) {
  2. final String endPoint = "<your endpoint>"; //http开头+公网访问域名,如:http://myotstest.cn-hangzhou.ots.aliyuncs.com
  3. final String accessId = "<your access id>";
  4. final String accessKey = "<your access key>";
  5. final String instanceName = "<your instance name>";//实例名
  6. //以上四个参数替换请把<>也替换掉
  7. 运行java程序

结果:

复制代码

  1. 表已创建
  2. 成功插入数据, 消耗的写CapacityUnit为:1
  3. 本次读操作消耗的读CapacityUnti为:1
  4. name信息:张三:STRING
  5. address信息:中国A地:STRING
  6. age信息:20:INTEGER
  7. 成功更新数据, 消耗的写CapacityUnit为:1
  8. 成功删除数据, 消耗的写CapacityUnit为:1
  9. 表已删除

五、代码分享

       main方法

  1. public static void main(String args[]) {
  2. final String endPoint = "<your endpoint>";
  3. final String accessId = "<your access id>";
  4. final String accessKey = "<your access key>";
  5. final String instanceName = "<your instance name>";
  6. OTSClient client = new OTSClient(endPoint, accessId, accessKey, instanceName);
  7. final String tableName = "sampleTable";
  8. try{
  9. // 创建表
  10. createTable(client, tableName);
  11. // 注意:创建表只是提交请求,OTS创建表需要一段时间。
  12. // 这里简单地等待30秒,请根据您的实际逻辑修改。
  13. Thread.sleep(30000);
  14. // 插入一条数据。
  15. putRow(client, tableName);
  16. // 再取回来看看。
  17. getRow(client, tableName);
  18. // 改一下这条数据。
  19. updateRow(client, tableName);
  20. // 删除这条数据。
  21. deleteRow(client, tableName);
  22. }catch(ServiceException e){
  23. System.err.println("操作失败,详情:" + e.getMessage());
  24. // 可以根据错误代码做出处理, OTS的ErrorCode定义在OTSErrorCode中。
  25. if (OTSErrorCode.QUOTA_EXHAUSTED.equals(e.getErrorCode())){
  26. System.err.println("超出存储配额。");
  27. }
  28. // Request ID可以用于有问题时联系客服诊断异常。
  29. System.err.println("Request ID:" + e.getRequestId());
  30. }catch(ClientException e){
  31. // 可能是网络不好或者是返回结果有问题
  32. System.err.println("请求失败,详情:" + e.getMessage());
  33. } catch (InterruptedException e) {
  34. System.err.println(e.getMessage());
  35. }
  36. finally{
  37. // 不留垃圾。
  38. try {
  39. deleteTable(client, tableName);
  40. } catch (ServiceException e) {
  41. System.err.println("删除表格失败,原因:" + e.getMessage());
  42. e.printStackTrace();
  43. } catch (ClientException e) {
  44. System.err.println("删除表格请求失败,原因:" + e.getMessage());
  45. e.printStackTrace();
  46. }
  47. }
  48. }

这里完成了下面几个动作

a、创建表

b、简单地等待30秒

c、插入一条数据

d、再取回来看看

e、修改这条数据

f、删除这条数据

g、最后删除表

创建表的方法

复制代码

  1. private static void createTable(OTSClient client, String tableName)
  2. throws ServiceException, ClientException{
  3. TableMeta tableMeta = new TableMeta(tableName);
  4. tableMeta.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyType.INTEGER);
  5. tableMeta.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyType.INTEGER);
  6. // 将该表的读写CU都设置为100
  7. CapacityUnit capacityUnit = new CapacityUnit(100, 100);
  8. CreateTableRequest request = new CreateTableRequest();
  9. request.setTableMeta(tableMeta);
  10. request.setReservedThroughput(capacityUnit);
  11. client.createTable(request);
  12. System.out.println("表已创建");
  13. }

插入行的方法

复制代码

  1. private static void putRow(OTSClient client, String tableName)
  2. throws ServiceException, ClientException{
  3. RowPutChange rowChange = new RowPutChange(tableName);
  4. RowPrimaryKey primaryKey = new RowPrimaryKey();
  5. primaryKey.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyValue.fromLong(1));
  6. primaryKey.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyValue.fromLong(101));
  7. rowChange.setPrimaryKey(primaryKey);
  8. rowChange.addAttributeColumn(COLUMN_NAME_NAME, ColumnValue.fromString("张三"));
  9. rowChange.addAttributeColumn(COLUMN_MOBILE_NAME, ColumnValue.fromString("111111111"));
  10. rowChange.addAttributeColumn(COLUMN_ADDRESS_NAME, ColumnValue.fromString("中国A地"));
  11. rowChange.addAttributeColumn(COLUMN_AGE_NAME, ColumnValue.fromLong(20));
  12. rowChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));
  13. PutRowRequest request = new PutRowRequest();
  14. request.setRowChange(rowChange);
  15. PutRowResult result = client.putRow(request);
  16. int consumedWriteCU = result.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit();
  17. System.out.println("成功插入数据, 消耗的写CapacityUnit为:" + consumedWriteCU);
  18. }

获取行的方法

复制代码

  1. private static void getRow(OTSClient client, String tableName)
  2. throws ServiceException, ClientException{
  3. SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(tableName);
  4. RowPrimaryKey primaryKeys = new RowPrimaryKey();
  5. primaryKeys.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyValue.fromLong(1));
  6. primaryKeys.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyValue.fromLong(101));
  7. criteria.setPrimaryKey(primaryKeys);
  8. criteria.addColumnsToGet(new String[] {
  9. COLUMN_NAME_NAME,
  10. COLUMN_ADDRESS_NAME,
  11. COLUMN_AGE_NAME
  12. });
  13. GetRowRequest request = new GetRowRequest();
  14. request.setRowQueryCriteria(criteria);
  15. GetRowResult result = client.getRow(request);
  16. Row row = result.getRow();
  17. int consumedReadCU = result.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit();
  18. System.out.println("本次读操作消耗的读CapacityUnti为:" + consumedReadCU);
  19. System.out.println("name信息:" + row.getColumns().get(COLUMN_NAME_NAME));
  20. System.out.println("address信息:" + row.getColumns().get(COLUMN_ADDRESS_NAME));
  21. System.out.println("age信息:" + row.getColumns().get(COLUMN_AGE_NAME));
  22. }

更新行的方法

复制代码

  1. private static void updateRow(OTSClient client, String tableName)
  2. throws ServiceException, ClientException{
  3. RowUpdateChange rowChange = new RowUpdateChange(tableName);
  4. RowPrimaryKey primaryKeys = new RowPrimaryKey();
  5. primaryKeys.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyValue.fromLong(1));
  6. primaryKeys.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyValue.fromLong(101));
  7. rowChange.setPrimaryKey(primaryKeys);
  8. // 更新以下三列的值
  9. rowChange.addAttributeColumn(COLUMN_NAME_NAME, ColumnValue.fromString("张三"));
  10. rowChange.addAttributeColumn(COLUMN_ADDRESS_NAME, ColumnValue.fromString("中国B地"));
  11. // 删除mobile和age信息
  12. rowChange.deleteAttributeColumn(COLUMN_MOBILE_NAME);
  13. rowChange.deleteAttributeColumn(COLUMN_AGE_NAME);
  14. rowChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_EXIST));
  15. UpdateRowRequest request = new UpdateRowRequest();
  16. request.setRowChange(rowChange);
  17. UpdateRowResult result = client.updateRow(request);
  18. int consumedWriteCU = result.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit();
  19. System.out.println("成功更新数据, 消耗的写CapacityUnit为:" + consumedWriteCU);
  20. }

删除行的方法

复制代码

  1. private static void deleteRow(OTSClient client, String tableName)
  2. throws ServiceException, ClientException{
  3. RowDeleteChange rowChange = new RowDeleteChange(tableName);
  4. RowPrimaryKey primaryKeys = new RowPrimaryKey();
  5. primaryKeys.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyValue.fromLong(1));
  6. primaryKeys.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyValue.fromLong(101));
  7. rowChange.setPrimaryKey(primaryKeys);
  8. DeleteRowRequest request = new DeleteRowRequest();
  9. request.setRowChange(rowChange);
  10. DeleteRowResult result = client.deleteRow(request);
  11. int consumedWriteCU = result.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit();
  12. System.out.println("成功删除数据, 消耗的写CapacityUnit为:" + consumedWriteCU);
  13. }

删除表的方法

复制代码

  1. private static void deleteTable(OTSClient client, String tableName)
  2. throws ServiceException, ClientException{
  3. DeleteTableRequest request = new DeleteTableRequest();
  4. request.setTableName(tableName);
  5. client.deleteTable(request);
  6. System.out.println("表已删除");
  7. }

五、测试体会

OTS 使用还是很简单方便的,基本的稳定和安全还是有保证的。

1、系统可用性99.9%,自动故障检测与恢复;

2、用户级别的数据隔离、访问控制和权限管理,用户只能访问有权限的表,数据冗余备份;

3、ots 主要的优势还是在于大数据量方面,单表百TB级别数据存储,毫秒级别单行读写延迟,十万级别QPS。

原文地址:http://bbs.aliyun.com/read/178870.html

微博互动:http://weibo.com/1644971875/BrlU9CYNQ

参加活动:http://promotion.aliyun.com/act/aliyun/freebeta/

?

时间: 2025-01-01 20:50:21

【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验的相关文章

【阿里云产品公测】弹性伸缩服务ESS之试用初体验

T>>c2$ x 弹性伸缩服务ESS之试用初体验 作者:云郎 2014/10/15 阿里云弹性伸缩服务(Elastic Scaling Service)是根据用户的业务需求和策略,自动调整其弹性计算服务器(ECS)的管理服务.其能够在业务增长时自动增加ECS实例,并在业务下降时自动减少ECS实例. 收到ESS开始公测的邀请,马上怕不急待的申请了公测资格,开始体验传说中的ESS云服务了.因为笔者一直在全面的测试阿里云产品,在做压测过程中经常需要动态的调整ECS云主机的数量以确保能够给RDS提供合

【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人聊天

作者:阿里云用户啊里新人 需求:基本实现智能聊天! 最近在开发一款机器人,希望实现基本的聊天功能,词库是有的,但是如果是做完全匹配这个出来的效果很悲催,   比如词库:你好,回答是:哈哈,很好啊. 如果问:你好?,这时候词库没有就无法回答. 一直在考虑怎么实现,当看到阿里的opensearch之后就感觉:这个就是我想要的 之前没有研究过,只听过搜索引擎,所以我是这块的小白.感觉很高大上,什么分词啊,匹配啊...专业名词我就不用了因为我不专业哈哈 按照惯例依然附上一张 实现效果图:     准备工

【阿里云产品公测】大数据下精确快速搜索OpenSearch

[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时

【阿里云产品公测】简单日志服务SLS使用评测 + 教程

[阿里云产品公测]简单日志服务SLS使用评测 + 教程 评测介绍 被测产品: 简单日志服务SLS 评测环境: 阿里云基础ECS x2(1核, 512M, 1M) 操作系统: CentOS 6.5 x64 日志环境: Nginx(v1.6.2) HTTP服务器访问日志.服务器系统日志 评测人: mr_wid 评测时间: 2014年9月28日-2014年10月8日 准备工作 一.知彼知己, 百战不殆.对产品的了解程度, 直接决定着评测质量, 在评测前, 笔者首先整理并详细阅读了有关SLS产品以及关联

【阿里云产品公测】利用PTS服务优化网站数据库读写性能

[阿里云产品公测]利用PTS服务优化网站数据库读写性能 作者:阿里云用户千鸟 写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时候产生故障,于是简单分析了一下数据库读写的性能优化以及利用PTS的测试结果,整理出来和大家分享一下,顺便参加一下这个活动.        几乎所有的网站都需要数据库来存储网站中的相关信息,因此在网站应用与数据库的交互过程中,数据库数据读取的性能对网站整体的性能是至关重要的. ?      通常我们在

【阿里云产品公测】消息队列服务MQS使用分享

作者:阿里云用户 wiwi 消息队列MQS,顾名思义,是用于发送接收消息用的.废话不说,直接进入主题. 使用场景:服务添加了一个新功能,主要用于生成图片,本人用的开发语言是PHP,生成图片比较耗服务器性能,如果使用一台服务器生成的话,生成大量图片时速度就会很慢. 由此决定使用3台服务器同时处理,将任务分布到3台服务器中.另外有一台服务器用于提交任务. mqs支持多个生产者.多个消费者并发访问一个队列(本例是一个生产者,3个消费者). 简单的服务器部署情况如下图: 具体的代码实现这里就不再说明了,

【阿里云产品公测】云引擎ACE初体验

作者:阿里云用户蓝色之鹰 :RYYjmG5;  来投票支持我把=i2]qj\  序号2. [阿里云产品公测]云引擎ACE初体验:作者:蓝色之鹰 e(OKE7  序号10.[阿里云产品公测]结构化数据服务OTS之JavaSDK初体验:作者:蓝色之鹰 -- IewW  http://bbs.aliyun.com/read/178799.html 分享下我,公测体验! 来投票支持我把 序号2. [阿里云产品公测]云引擎ACE初体验:作者:蓝色之鹰  序号10.[阿里云产品公测]结构化数据服务OTS之J

【阿里云产品公测】工欲善其事,必先利其器,阿里云让我们扬帆起航

作者:阿里云用户 supechina 工欲善其事,必先利其器    工欲善其事必先利其器.谓工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要.语出孔子·<论语·卫灵公>:“子贡问为仁.子曰:“工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者.”                     2011年我们重金够得本地双拼域名jining.com,建立济宁网,开始我们的本地社区化运营,刚开始说运营有点牵强,因为我们根本不懂本地网站的发展路子.        

【阿里云产品公测】阿里云ACE部署通用完整教程及评测

[阿里云产品公测]阿里云ACE部署通用完整教程及评测 作者:阿里云用户bailimei ACE应该是目前在公测的服务中应用最广泛的一项服务.在公测云引擎ACE前曾使用过新浪SAE,而ACE给我的最初印象是比SAE要简单易用的多,除了上传文件需用SVN外,其它就像在用ECS+RDS,体验上没多大差别,因我现在就用着这两项产品,所以感觉比较直观.原先已有同学写了一些优秀的ACE教程,对分享自己的体验我们都应该点赞.下面以测试部署wordpress为例,重点对ACE使用过程中遇到的难点问题展开说明,并