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的服务.具体的开启操作: ...
随机推荐
- Jquery 在动态元素上绑定事件
弄了很久却没有弄出来,感觉没有错,但是动态元素上的事件根本就不响应,代码如下: <input type="button" id="btnyes" valu ...
- jQuery取值相加
实在是太菜了. 这样一个需求: 计算两个text中的值的和,引发了对jQuery中类型转换的知识软肋. 在网上找到了才知道:http://zhidao.baidu.com/link?url=ujw88 ...
- 使用另一种方式实现js中Function的调用(call/apply/bind)
在JavaScript中函数的调用可以有多种方式,但更经典的莫过于call和apply.call跟apply都绑定在函数上,他们两个的第一个参数意义相同,传入一个对象,他作为函数的执行环境(实质上是为 ...
- ubuntu 下dbus的环境搭建和使用
从https://launchpad.net/ubuntu/+source/dbus/1.10.6-1ubuntu2下载需要的dbus包,然后解压,./configure make && ...
- IIS WMI Provider
section contains information about the classes that are implemented by the IIS WMI provider in the M ...
- Entity Framework(一) 映射
ADO.NET Entity Framework通过Modeel First和DataBase First,提供了几个把数据库表映射到对象上的曾.通过Database First,可以从一个数据库架构 ...
- error: format not a string literal and no format arguments [-Werror=format-security]
You can put this in your Application.mk to disable treating those warnings as errors: APP_CFLAGS += ...
- OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数
1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如 ...
- 悲惨的Android程序员
Android程序员太悲惨了,连Android官网都访问不了,整个Android程序员的水平都被拉低了一个等级.受不了了.说说悲惨的遭遇吧. 起源:高射炮打苍蝇,驴受伤了 Android一个纯技术网站 ...
- eclipse不能创建java虚拟机-解决方法
找到eclipse目录下的eclipse.ini,可以看到如下内容: -startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar ...