简介

因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来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使用的更多相关文章

  1. Sina App Engine(SAE)入门教程(2)-Mysql使用

    如果你还没有SAE的账号,请在http://sae.sina.com.cn 注册新用户.具体的注册流程请参见:Sina App Engine(SAE)入门教程(1)在常规的环境下,我们可以通过http ...

  2. Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用

    fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...

  3. Sina App Engine(SAE)入门教程(1)

    此教程只针对刚接触SAE的小白用户,资深码农.高手请绕道.首先还是一个经典的实例,hello sae. 创建应用 在注册完账号之后,需要到 http://sae.sina.com.cn/?m=myap ...

  4. Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用

    参考资料 SaeVCode api 文档 使用教程 所有的验证码原理都是生成一个vcode字符串,存到session中,和用户的输入进行比较判断,以下是一个使用验证码服务的完整实例: 首页index. ...

  5. Sina App Engine(SAE)入门教程(7)- Storage使用

    参考阅读 sae storage api 文档 Storage 说明文档 Storage 大文件上传说明 storage是什么? 因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现 ...

  6. Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用

    参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...

  7. Sina App Engine(SAE)入门教程(9)- SaeMail(邮件)使用

    参考资料: SAE mail api 文档 怎么使用? 参见代码: <?php $mail = new SaeMail(); $f = new SaeFetchurl(); $img_data ...

  8. Sina App Engine(SAE)入门教程(6)- memcache使用

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...

  9. Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用

    分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...

随机推荐

  1. [大牛翻译系列]Hadoop(19)MapReduce 文件处理:基于压缩的高效存储(二)

    5.2 基于压缩的高效存储(续) (仅包括技术27) 技术27 在MapReduce,Hive和Pig中使用可分块的LZOP 如果一个文本文件即使经过压缩后仍然比HDFS的块的大小要大,就需要考虑选择 ...

  2. Linux环境下Python的安装过程

    Linux环境下Python的安装过程 前言 一般情况下,Linux都会预装 Python了,但是这个预装的Python版本一般都非常低,很多 Python的新特性都没有,必须重新安装新一点的版本,从 ...

  3. openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)

    workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...

  4. 查看SQL Server 备份信息

    RESTORE HEADERONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008\MSSQL\Back ...

  5. [转]bat中的特殊字符,以及需要在bat中当做字符如何处理

    bat中的特殊字符,以及需要在bat中当做字符如何处理 批处理.Bat 中特殊符号的实际作用,Windows 批处理中特殊符号的作用: @ \\隐藏命令的回显. ~ \\在for中表示使用增强的变量扩 ...

  6. Input event驱动

    Input event驱动 Linux 专门对输入设备. 键盘,鼠标,手柄,触摸屏.按键.封装一个类驱动. 主要统一与应用程序接口.这一类的设备结点都是在/dev/input/eventn( 0< ...

  7. EditorWindow 和MenuItem

    using UnityEngine; using System.Collections; using UnityEditor; public class ClipEventEditor : Edito ...

  8. 基于FPGA的线阵CCD图像测量系统研究——笔记

    本文是对基于FPGA的线阵CCD图像测量系统研究(作者:高尚)的阅读笔记 第一章绪论 1. 读读看 读了前面的摘要依然没有看懂作者要做什么.接着往下读....终于看到了一个字眼“基于机器视觉的图像测量 ...

  9. iOS 进阶 第十二天(0413)

    0413 - Quartz2D 使用Quartz2D画图形步骤:(drawRect: 方法 是 在view第一次显示到屏幕上的时候会调用一次.是系统主动去掉用的,不能直接调用.那么问题来了,比如我要通 ...

  10. DBA应该知道的一些SQL Server跟踪标记

    跟踪标记是什么? 对于DBA来说,掌握Trace Flag是一个成为SQL Server高手的必要条件之一,在大多数情况下,Trace Flag只是一个剑走偏锋的奇招,不必要,但在很多情况下,会使用这 ...