简介

因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来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. android 在标题栏加上按钮

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowF ...

  2. .NET SDK和下载

    http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx .NET SDK和下载 您可以通过下载.NET框架针对包和软件开发工具包,并使用它们与Visual ...

  3. 【转】为什么我说 Android 很糟糕

    http://zhuanlan.zhihu.com/wooyun/19879016 Android 的安全问题一直被吐槽,包括不安全的APP市场.上次的远程命令执行漏洞.还有它的权限机制,总之一团糟, ...

  4. 世界级Oracle专家Jonathan Lewis:我很为DBA们的未来担心(图灵访谈)

    部分节选 图灵社区:如果您的子女对计算机科学感兴趣,你会让他们选什么具体的方向呢? JL:我的孩子对计算机科学一点都不感兴趣,甚至对科学都没什么兴趣.他们主修的都是艺术.如果要我给其他的人建议的话,我 ...

  5. java之classpath到底是什么

    如果你输入一个命令,比如java那么系统是如何找到这个命令的呢?按照顺序,系统先在当前目录搜索是否有java.exe, java.bat 等. 如果没有,就得到系统的PATH(不区分大小写)里面查找. ...

  6. 自定义Adapter

    --MainActivity代码 package com.example.qqdemo; import java.util.ArrayList; import java.util.List; impo ...

  7. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space解决方法 问题描述 Exception ...

  8. mouse_driver

    1:function.h #ifndef FUNCTION_H#define FUNCTION_H #define DRIVER_FUNCTION_ADD_DEVICE#define DRIVER_F ...

  9. Core身份认证

    Core中实现一个基础的身份认证 注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET ...

  10. Android学习笔记:TabHost 和 FragmentTabHost(转)

    转自:http://www.cnblogs.com/asion/p/3339313.html   作者:Asion Tang   出处:http://asiontang.cnblogs.com   T ...