YCSB初步介绍

   随着大数据时代的到来和云计算的不断发展,作为云计算最基础的设施存储产品也越来越多,开源分布式存储系统有BigTable-like系统HBase,dynamo-like系统Cassandra,voldemort,Riak,淘宝开源的OceanBase等。当然还有一些未开源系统如Yahoo! 的PNUTS,Google的BigTable等。没有一种系统能够在所有的workload下都是最合适的。

各个系统都会作出一些tradeoff来最大化的适应目标应用的workload。所以这就产生了一个问题,应用开发中在进行存储系统选型的时候,哪个系统最合适?

  Yahoo! Cloud Serving Benchmark (YCSB) 是一个用来测试在线数据库性能,扩展性的框架,Java语言实现的,下载地址在https://github.com/brianfrankcooper/YCSB/wiki 这个框架可以给系统的选型作一些指导。这个框架具有很好的可扩展性,用户可以通过编写Java代码的方式来测试自己的数据库,可以通过配置文件来指定需要进行什么样的workload的测试,比如读写比例多少,每条记录多大,每个字段多大,并发数多大,进行随机选择使用的分布(比如读一条数据的时候)等。

   以下为YCSB的架构图:

  

其中,灰色部分用户可以自己定制。

DB Interface Layer

和存储服务进行交互,例如read,update,delete,scan,insert记录等操作,最终都是通过DB Interface Layer交互的。针对具体的数据库,需要实现自己的DB Interface Layer,所以这个类的实现需要调用数据库服务器的AP,DB Interface LayerI对应于抽象类  com.yahoo.ycsb.DB ,这个抽象类中主要有如下方法:

 //Read a single recordpublic int read(String table, String key, Set fields, HashMap result);//Perform a range scanpublic int scan(String table, String startkey, int recordcount, Set fields, Vector> result);//Update a single recordpublic int update(String table, String key, HashMap values);//Insert a single recordpublic int insert(String table, String key, HashMap values);//Delete a single recordpublic int delete(String table, String key);

Workload Executor:

是用来产生workload的,针对存储服务的操作最终都是通过调用com.yahoo.ycsb.DB中的方法来实现的,Workload Executor对应于抽象类com.yahoo.ycsb.Workload

这个抽象类中有如下几个主要方法:

public void init(Properties p) throws WorkloadException

   YCSB Client启动的时候可以指定使用的线程数,这个方法用来初始化scenario和一些线程间的共享信息,只会被调用一次。

public Object initThread(Properties p, int mythreadid, int threadcount) throws WorkloadException

   每个客户端线程都会执行一次这个方法,用来初始化thread-specific的一些状态信息,返回的Object对象封装所有的和这个线程相关的状态信息,并且这个返回的Object会被

  传递给以下两个方法的第二个参数。

public abstract boolean doInsert(DB db, Object threadstate)

  这个函数用于创建一条record,它需要知道目标数据库服务器的record的结构,然后插入数据库,插入操作会调用DB中的相应的方法。

public abstract boolean doTransaction(DB db, Object threadstate)

  这个函数会被多个线程调用,所以这个函数必须是线程安全的。这个函数用来进行一次transaction操作,其实就是一种逻辑的操作,这个逻辑的操作中可能会包含多个DB中的基本操作。客户端启动的时候可以指定operation的次数,这个次数就是这个函数的调用次数。

客户端的每个线程都会维护一个DB的instance和一个workload的instance 。

 

另外,

YCSB客户端进行workload的时候,需要进行很多的随机选择,比如,读/写哪条记录,scan的时候scan多少条,做什么操作(insert ,update read scan),这些由很多的分布进行决定:

Uniform:当读一条记录的时候,任何一条记录被读取的概率都是相等的。

zipfian:选择记录的时候,遵循这个分布,这个分布的特点是有些记录就是更popular,有些记录就是不popular

latest:比如,最近插入的数据最popular

multinomial:多项式分布,每个item被选择的概率是确定的,例如read操作0.95,update操作0.05,scan操作概率为0,那么这就是一次read-heavy的负载。  
参考文献
Benchmarking Cloud Serving Systems with YCSB

转载于:https://www.cnblogs.com/foxmailed/archive/2012/02/29/2374595.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kotlin实现继承_Kotlin程序| 继承的例子

kotlin实现继承遗产 (Inheritance) Inheritance is a mechanism wherein a new class is derived from an existing class. 继承是一种机制,其中新类是从现有类派生的。 All Kotlin Classes have a common Superclass Any, it is the Default Superclass with no S…

【C++grammar】动态类型转换、typeid与RTTI

目录动态类型转换1、为何需要动态类型转换2、dynamic_cast<>();运算符3、向上转换和向下转换( Upcasting and Downcasting)4、 基类对象和派生类对象的互操作5、Upcasting/Downcasting与继承链上不同类的对象之间的赋值有什么关系和区别&#xff1f;typeid 运行时查询类型…

nginx资源定向 css js路径问题

今天玩玩项目&#xff0c;学学nginx发现还不错&#xff0c;速度还可以&#xff0c;但是CSS JS确无法使用&#xff0c;原来Iginx配置时需要对不同类型的文件配置规则&#xff0c;真是很郁闷&#xff0c;不过想想也还是很有道理。闲暇之际&#xff0c;把配置贴上来。#user nobody…

五、库存查询功能的完善

一、数据库的建立 由于查询功能和之前的 入库管理功能 所用的数据库都一样&#xff0c;这里仍使用yy_textile表 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 query查询页面 main_page…

整合ajaxmin 和 less 到VS.net

我用的前端框架是bootstrap_extra, twitter团队做的&#xff0c;这个是他的一个扩展&#xff0c;首先从上面下载一个。至于ajaxmin&#xff0c;请参考这里1) 从bootstrap_extra的解压包中&#xff0c;复制build目录下三个文件到项目中去&#xff0c;这三个文件分别是BatchSubsi…

转:只能选择GridView中的一个CheckBox(单选CheckBox)

方法1&#xff1a; protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e){CheckBox cbx e.Row.FindControl("cbID") as CheckBox;try{//绑定选中CheckBox 客户端IDcbx.Attributes.Add("onclick", "Change(" cbx.Cli…

六、出库管理功能的实现

一、数据库的建立 这里仍使用yy_textile表 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 shipment出库管理页面 main_page页面进行功能完善 三、代码实现 shipment出库管理页面 u…

数学建模:层次分析法实例以及代码

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录层次分析法的思想层次分析法步骤具体案例(市政工程项目建设决策)1.问题提出2.…

c 僵尸进程_演示僵尸进程的C程序

c 僵尸进程僵尸进程 (Zombie process) A process which has finished its execution but still has an entry in the process table to report to its parent process is known as a zombie process. 一个已经完成执行但仍在进程表中具有要报告给其父进程的条目的进程称为僵尸进…

探秘IntelliJ IDEA 13测试版新功能——调试器显示本地变量

IntelliJ IDEA在业界被公认为最好的Java开发平台之一&#xff0c;JetBrains公司将在12月正式发布IntelliJ IDEA 13版本。 现在&#xff0c;小编将和大家一起探秘密IntelliJ IDEA 13测试版本新功能——调试器显示本地变量。这个功能非常强大&#xff0c;调试器可以显示变量&…

C# Windows Form下的控件的Validator(数据验证)

由于偶尔的一个想法&#xff0c;谋生了一个做一个windows form下的Validator控件&#xff0c;或者直接说类吧&#xff01; 因为webform下的Validator控件太好用了。哈哈&#xff0c;直接看代码&#xff01; 下面这个类&#xff0c;主要是一个简单的验证类&#xff0c;不过只是起…

七、流水查询---记录用户登录信息

一、数据库的建立 在fiber_yy数据库下创建yy_user_record表 可以先手动填入几条数据信息 初始数据库信息 username为用户账号 sex为用户注册所填写的性别 phone为用户手机号 time为用户登录该系统的时间 二、页面的设计 登录注册页面我就不演示了&#xff0c;前几篇博文…

leetcode 455. 分发饼干 思考分析

目录题目自己的思路以及AC代码参考思路题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并…

c++ cdi+示例_C ++'not'关键字和示例

c cdi示例"not" is an inbuilt keyword that has been around since at least C98. It is an alternative to ! (Logical NOT) operator and it mostly uses with the conditions. “ not”是一个内置关键字&#xff0c;至少从C 98起就存在。 它是替代&#xff01; …

【second】Flatten Binary Tree to Linked List

递归 void flatten(TreeNode *root) {// Note: The Solution object is instantiated only once and is reused by each test case.flat(root);}TreeNode* flat(TreeNode* root){if(!root)return NULL;TreeNode* left_tail flat(root->left);TreeNode* right_tail flat(ro…

八、流水查询---记录纺织品出库信息

一、数据库的建立 在fiber_yy数据库下创建yy_textile_record表 可以先手动填入几条数据信息 初始数据库信息 第一条数据的username是空格不是null number为织物的品号(唯一的) stock为出货量 username为哪个账号 time为出货时间 二、页面的完善 登录注册页面我就不演示…

应用程序栏【WP7学习札记之九】

本节是WP7学习札记的第九篇&#xff0c;讲的是系统托盘和应用程序栏&#xff0c;具体内容是系统托盘和应用程序栏的介绍&#xff0c;如何分别使用C#、xaml以及Expression Blend生成应用程序栏&#xff0c;应用程序栏的透明度以及对屏幕方向改变的支持。摘要如下&#xff1a; 系…

椭圆曲线密码学导论pdf_椭圆曲线密码学

椭圆曲线密码学导论pdf历史 (History) The use of elliptic curves in cryptography was advised independently by Neal Koblitz and Victor S. Miller in 1985. Elliptic curve cryptography algorithms entered large use from 2004 to 2005. 1985年&#xff0c; Neal Kobli…

leetcode 第 216 场周赛 整理

目录1662. 检查两个字符串数组是否相等题目自己代码5606. 具有给定数值的最小字符串题目自己代码贪心算法1664. 生成平衡数组的方案数题目自己代码动态规划优化1665. 完成所有任务的最少初始能量题目思路1662. 检查两个字符串数组是否相等 题目 给你两个字符串数组 word1 和 …

九、忘记密码功能的实现

一、页面设计 login页面&#xff0c;和第二篇博文(用户登录和注册)页面基本一样&#xff0c;只不过多了一个按钮 其中忘记密码&#xff1f;点我找回 为button3 retrieve_password页面 change_password页面 页面如下&#xff1a; 二、数据库 因为是忘记密码&#xff0c;…