LightCloud:分布式键-值数据库

Plurk.com在今年2月28日开源了LightCloud这个分布式的键-值数据库,根据 官方网站的信息,有以下特性

基于Tokyo Tyrant(这个项目貌似又是另一个名叫Tokyo Cabinet的数据库系 统的网络接口)。Tokyo Tyrant是最快的键-值数据库之一,并且已经开发了好几 年并且在n个网站中被应用。

性能非常好(可以和memcached进行对比)

在很少的服务器上面可以存储百万级的数据量

简单的通过添加节点来扩展

节点可以通过master-master复制来进行备份。很容易添加自动错误恢复和负 载均衡功能

使用Lua语言进行扩展

备份和恢复数据时不需要关机

LightCloud Manager工具可以很方便的管理节点,备份节点,查看状态

非常小巧(客户端大约500行,Manager大约400行)

纯python开发,但是很容易移植到其他语言

和Memcached以及MySql的区别

Memcached是缓存服务器,而LightCloud内存储的数据是持久的(到底是数据 库嘛)。

MySql和其他关系数据库服务器存储键-值对时效率不高(肯定没LightCloud这 种专用的高)。

和Memcached性能对比

对LightCloud和Memcached做10,000次set和get

Elapsed for 10000 gets: 1.74538516998 seconds  [memcache]
Elapsed for 10000 gets: 3.57339096069 seconds [lightcloud]

Elapsed for 10000 sets: 1.88236999512 seconds [memcache]
Elapsed for 10000 sets: 9.23674893379 seconds [lightcloud]

值得注意的一点是Memcached是完全在内存中操作的,而LightCloud是会读写 硬盘的。

而Tokyo Tyrant官网提供的数据更加惊人(LightCloud在Tokyo Tyrant上增加 了网络和Python语言执行开销)

1 million GETS in < 0.5 seconds

1 million SETS in < 0.5 seconds

使用Lua进行扩展

Lua扩展貌似是由Tokyo Tyrant提供的

下面是一个简单的扩展,扩展出一个incr命令

function incr(key, value)
  value = tonumber(value)
  if not value then
   return nil
  end
  local old = tonumber(_get(key))
  if old then
   value = value + old
  end
  if not _put(key, value) then
   return nil
  end
  return value
end

时间: 2024-11-10 00:43:30

LightCloud:分布式键-值数据库的相关文章

键值数据库 IonDB

IonDB 详细介绍 IonDB 专为 Arduino 和 IoT 提供开箱即用的,基于磁盘的快速存储功能,为受限系统提供键值存储功能,速度非常快,可以充分提升 Arduino 的性能. 这个项目是英国哥伦比亚的奥肯那根大学 Ramon Lawrence 博士指导项目的一部分,由 Lawrence 博士的分布式数据实验室支持.还有另外一个类似的项目,也是专为嵌入式设备和传感器节点设计的关系型数据库 LittleD. 一般情况下,IonDB 支持: 存储一个键的任意值 重复键支持 范围和等值查询

不同数据库获取新增加的主键值

获取不同数据库新增记录主键值   数据库  获取新增主键值的SQL语句 DB2 INENTIY_VAL_LOCAL() Informix SELECT dbinfo('sqlca.sqlerrd1') FROM <Table> Sybase SELECT @@IDENTITY SQL Server SELECT SCOPE_IDENTITY()或SELECT @@IDENTITY MySQL SELECT LAST_INSERT_ID() HsqlDB CALL IDENTITY() Clou

主键值数据类型-informix数据库,不小心把主键值从int8改成float类型了

问题描述 informix数据库,不小心把主键值从int8改成float类型了 informix数据库,不小心把主键值从int8改成float类型了,然后值就变了.有人能帮忙看一下可能原因是什么吗? 解决方案 补充一下,数值由824变成800,转换的是informix数据库的主键值,由int8转为float

JSP中如何取得MSSQL数据库表中自动增长的ID主键值?

JSP中如何取得MSSQL数据库表中自动增长的ID主键值? 如:建一个表student有属性列userid,username其中userid为INT类型只读自动加1的主键(也就是每插入一条记录都会自动加1),那么如何在JSP中得到当前插入行的userid值(比如:我向表里插入了三条记录,在我插入第三条记录时userid的值应为3,那么如何得到这个3)? 先创建存储过程: CREATE PROCEDURE addrec   (   @OutID int output,   @Name varcha

05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令

 Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用.   键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表示取出所有的key 127.0.0.1:6379> keys * 1) "age" 2) "name" 3) "age2" 127.0.0.1:6379> keys a* 1) "age" 2) "age

使用CMP Beans生成主键值

Sun Java System Application Server 支持 EJB 1.1.2.0 和 2.1 CMP beans 的自动主键生成.若 要指定自动主键生成,在 ejb-jar-xml 文件中将 prim-key-class 元素的值规定为 java.lang.Object. 具有自动生成主键的 CMP beans 可以参与与其他 CMP beans 的关系.Sun Java System Application Server 不支持数据库生成的主键值. 如果在部署期间创建数据库架

注册表常用键值意义

[HKEY_CURRENT_USERSoftwarePoliciesMicrosoftInternet ExplorerControl Panel] ;[Internet Explorer选项类] "HomePage"=dword:00000001 ;禁止更改主页设置[0=可修改] "Cache"=dword:00000001 ;禁止更改Internet临时文件设置[0=可修改] "History"=dword:00000001 ;禁止更改历史记

因为相同类型的其他实体已具有相同的主键值。在使用 &quot;Attach&quot; 方法或者将实体的状态设置为 &quot;Unchanged&quot; 或 &quot;Modified&quot; 。。。

因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为.这可能是因为某些实体是新的并且尚未接收数据库生成的键值.在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged"

MyBatis获取自增长主键值的两种方式及源码浅析

昨天在做项目的时候遇到了一个坑,没错,就是获取MyBatis自增长主键值的坑.因为之前一直用ibatis,所以惯性的用了ibatis的写法,结果返回的值一直是1(受影响的行数).于是去翻了翻MyBatis的源码,发现它把主键值放到了参数对象上,获取主键值需要用参数对象去get主键值.真是坑.我先把解决办法放出来,然后再接着分析MyBatis的源码是怎么做的. 环境: 数据库MySql.User表,主键设置为自增长. CREATE TABLE `user` ( `id` INT(11) NOT N