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的服务.具体的开启操作: ...
随机推荐
- android 在标题栏加上按钮
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowF ...
- .NET SDK和下载
http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx .NET SDK和下载 您可以通过下载.NET框架针对包和软件开发工具包,并使用它们与Visual ...
- 【转】为什么我说 Android 很糟糕
http://zhuanlan.zhihu.com/wooyun/19879016 Android 的安全问题一直被吐槽,包括不安全的APP市场.上次的远程命令执行漏洞.还有它的权限机制,总之一团糟, ...
- 世界级Oracle专家Jonathan Lewis:我很为DBA们的未来担心(图灵访谈)
部分节选 图灵社区:如果您的子女对计算机科学感兴趣,你会让他们选什么具体的方向呢? JL:我的孩子对计算机科学一点都不感兴趣,甚至对科学都没什么兴趣.他们主修的都是艺术.如果要我给其他的人建议的话,我 ...
- java之classpath到底是什么
如果你输入一个命令,比如java那么系统是如何找到这个命令的呢?按照顺序,系统先在当前目录搜索是否有java.exe, java.bat 等. 如果没有,就得到系统的PATH(不区分大小写)里面查找. ...
- 自定义Adapter
--MainActivity代码 package com.example.qqdemo; import java.util.ArrayList; import java.util.List; impo ...
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space解决方法 问题描述 Exception ...
- mouse_driver
1:function.h #ifndef FUNCTION_H#define FUNCTION_H #define DRIVER_FUNCTION_ADD_DEVICE#define DRIVER_F ...
- Core身份认证
Core中实现一个基础的身份认证 注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET ...
- Android学习笔记:TabHost 和 FragmentTabHost(转)
转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tang 出处:http://asiontang.cnblogs.com T ...