Sina App Engine(SAE)入门教程(3)-KVDB使用
简介
因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进行了NoSQL方向的研发。
KV DB是SAE开发的分布式key-value数据存储服务,用来支持公有云计算平台上的海量key-value存储。KV DB支持的存储容量很大,对每个用户支持100G的存储空间,可支持1,000,000,000条记录,用户可以用KV DB存放简单数据,如好友关系等。
用KVDB能做什么?
- 存单键值(例如用作单篇文章的计数器)
- 存数组(例如存取用户信息)
- 存文件(这个也是可以的,虽然不是很推荐,下文中会给出例子)
- 其他(尽你所想)
KVDB使用有用资源
KVDB使用实例
以上介绍了KVDB可以的用途,下面将从上面介绍的几个方面给出具体的实例介绍SAE KVDB的使用。在使用之前,你需要到SAE的管理面板开始应用的KVDB。如下图所示,点击“服务列表”中的KVDB
在开启了之后,我们就可以使用SAE 提供的KVDB服务了,下面简单的写个脚本测试下KVDB服务,顺便介绍下KVDB的第一种应用,直接用户键值的存取。测试的代码如下:
<?php $kv = new SaeKV(); // 初始化KVClient对象 $ret = $kv->init(); var_dump($ret); ?>
访问http://lazydemo.sinaapp.com/saekv/test_kv.php可以看到输出是:
bool(true)
<?php $kv = new SaeKV(); // 初始化KVClient对象 $ret = $kv->init(); if($kv->get('count') == null) { $kv->set('count','1');//初始化计数器的值为1,确保只在初始化时设置一个初值 } $now = $kv->get('count');//取出当前的计数值 $setvalue = $now+1;//计数器的值加1 $kv->set('count',$setvalue);//写到计数器 echo "This page has been visted ".$setvalue; ?>
访问http://lazydemo.sinaapp.com/saekv/count_kv.php 就可以看到效果了~
下面介绍使用KVDB存取数组,例如存取一个用户的信息。
代码如下:
<?php $kv = new SaeKV(); // 初始化KVClient对象 $ret = $kv->init(); $myinfo = array('name'=>'lazy','age'=>'21','email'=>'webmaster@changes.com.cn'); $kv->set('lazy',$myinfo);//将我的信息的数组写到KVDB中 //然后再取出来 $myinfo_inkvdb = $kv->get('lazy'); var_dump($myinfo_inkvdb); ?
访问http://lazydemo.sinaapp.com/saekv/array_kv.php
array(3) { ["name"]=> string(4) "lazy" ["age"]=> string(2) "21" ["email"]=> string(24) "webmaster@changes.com.cn" }
可以看到,打出来的信息还是完整的数组,这个可比MySQL存取这样的关系方便多了~这只是一个简单的例子,当然衍生出的应用还有很多。
以上已经介绍了KVDB的两种应用,下面介绍使用KVDB存取文件,说到文件,肯定都会想到二进制,KVDB的value的最大长度:4M (默认启用压缩),也就是说我们要存取文件的大小不能超过4M,那么超过4M的文件是不是就不能存取了呢?答案是否定的,我的一个同事pagnee写出了一个实例说明了KVDB在存取文件的时候可以打散然后在输出的时候将文件拼接起来输出,但是作为入门教程不再讲述,有兴趣的可以自行找相关的资料看下。
下面的一个实例就是用KVDB来存取图片,具体的代码如下:
<?php $kv = new SaeKV(); // 初始化KVClient对象 $ret = $kv->init(); $f = new SaeFetchurl();//fetch使用将在后面的文章中介绍 $img_data = $f->fetch( 'http://ss7.sinaimg.cn/bmiddle/488efcbbt7b5c4ae51ca6&690' );//取回二进制数据 $kv->set('image',$img_data); //输入图片 $img_data_inkvdb = $kv->get('image'); header("content-type:image/jpg"); echo($img_data_inkvdb); ?>
原图片:http://ss7.sinaimg.cn/bmiddle/488efcbbt7b5c4ae51ca6&690
存取后输出的图片:http://lazydemo.sinaapp.com/saekv/storimage_kv.php
本部分代码打包下载
http://lazydemo.sinaapp.com/saekv/saekv.zip
Sina App Engine(SAE)入门教程(3)-KVDB使用的更多相关文章
- Sina App Engine(SAE)入门教程(2)-Mysql使用
如果你还没有SAE的账号,请在http://sae.sina.com.cn 注册新用户.具体的注册流程请参见:Sina App Engine(SAE)入门教程(1)在常规的环境下,我们可以通过http ...
- Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用
fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...
- Sina App Engine(SAE)入门教程(1)
此教程只针对刚接触SAE的小白用户,资深码农.高手请绕道.首先还是一个经典的实例,hello sae. 创建应用 在注册完账号之后,需要到 http://sae.sina.com.cn/?m=myap ...
- Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用
参考资料 SaeVCode api 文档 使用教程 所有的验证码原理都是生成一个vcode字符串,存到session中,和用户的输入进行比较判断,以下是一个使用验证码服务的完整实例: 首页index. ...
- Sina App Engine(SAE)入门教程(7)- Storage使用
参考阅读 sae storage api 文档 Storage 说明文档 Storage 大文件上传说明 storage是什么? 因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现 ...
- Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用
参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...
- Sina App Engine(SAE)入门教程(9)- SaeMail(邮件)使用
参考资料: SAE mail api 文档 怎么使用? 参见代码: <?php $mail = new SaeMail(); $f = new SaeFetchurl(); $img_data ...
- Sina App Engine(SAE)入门教程(6)- memcache使用
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...
- Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用
分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...
随机推荐
- Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html 介绍到了在MongoDB的控制台完成MongoDB的数据操作,通 ...
- SequoiaDB数据库集群部署
一般在多机环境下部署数据库的集群模式是比较繁琐的,下面我来分享一个如何通过shell脚本的方式简单.方便地部署我们的集群. 首先,我们要给机器配置信任关系,这样我们就无需手动的输入密码来执行ssh和s ...
- awk中文手册
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...
- IOS中Retain和Copy的区别
1 ,可读性: readonly . readwrite@property(readwrite,....) valueType value;这个属性是变量的默认属性,就是如果你 (readwrite ...
- ios开发--旋转、移动、缩放手势实例代码
代码如下: // 添加所有的手势 - (void) addGestureRecognizerToView:(UIView *)view { // 旋转手势 UIRotationGestureRecog ...
- Windows Media Player安装了却不能播放网页上的视频
前段时间遇到Windows Media Player安装了却不能播放网页上的视频的问题,在网上查找资料时,发现大部分资料都没能解决我这个问题.偶尔试了网上一牛人的方法,后来竟然解决了.现在再找那个网页 ...
- 屏蔽ios7中某个页面的默认手势滑回返回
- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:YES];self.navigationController.in ...
- setjmp和longjmp的使用
问题描述: setjmp和longjmp的使用 问题解决: setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序 ...
- 【BZOJ】【3196】Tyvj 1730 二逼平衡树
树套树 Orz zyf 学(co)习(py)了一下树套树的写法,嗯……就是线段树套平衡树. 具体实现思路就是:外部查询用的都是线段树,查询内部自己调用平衡树的操作. 抄抄代码有助理解= = 八中挂了… ...
- Ubuntu的LTS版本
Ubuntu的LTS版本什么意思 LTS是长期支持(Long Term Support)的缩写. 我们每六个月制作一个新的Ubuntu桌面和服务器的版本,这意味着你总能拥有开源世界提供的最新最好的应用 ...