技术标签: 微服务
原文:http://blog.csdn.net/guxch/article/details/12163047
-----------------------------------------------------------------------------------
|
Thrift |
Thrift2 |
结构 |
struct TCell struct ColumnDescriptor struct TRegionInfo struct Mutation struct BatchMutation struct TIncrement struct TColumn struct TRowResult struct TScan |
struct TTimeRange struct TColumn struct TColumnValue struct TColumnIncrement struct TResult struct TGet struct TPut struct TDelete struct TIncrement struct TScan struct TRowMutations |
异常 |
exception IOError exception IllegalArgument exception AlreadyExists |
exception TIOError exception TIllegalArgument |
其他 |
|
union TMutation enum TDeleteType enum TDurability |
服务 |
名称为:Hbase void enableTable() void disableTable() bool isTableEnabled() void compact() void majorCompact() list<Text> getTableNames() map<Text,ColumnDescriptor> getColumnDescriptors() list<TRegionInfo> getTableRegions() void createTable() void deleteTable() list<TCell> get() list<TCell> getVer() list<TCell> getVerTs() list<TRowResult> getRow() list<TRowResult> getRowWithColumns() list<TRowResult> getRowTs() list<TRowResult> getRowWithColumnsTs() list<TRowResult> getRows() list<TRowResult> getRowsWithColumns() list<TRowResult> getRowsTs() list<TRowResult> getRowsWithColumnsTs() void mutateRow() void mutateRowTs() void mutateRows() void mutateRowsTs() i64 atomicIncrement() void deleteAll() void deleteAllTs() void deleteAllRow() void increment() void incrementRows() void deleteAllRowTs() ScannerID scannerOpenWithScan() ScannerID scannerOpen() ScannerID scannerOpenWithStop() ScannerID scannerOpenWithPrefix() ScannerID scannerOpenTs() ScannerID scannerOpenWithStopTs() list<TRowResult> scannerGet() list<TRowResult> scannerGetList() void scannerClose() list<TCell> getRowOrBefore() TRegionInfo getRegionInfo() |
名称为:THBaseService bool exists(...) TResult get(...) list<TResult> getMultiple(...) void put(...) bool checkAndPut(...) void putMultiple(...) void deleteSingle(...) list<TDelete> deleteMultiple(...) bool checkAndDelete(...) TResult increment(...) i32 openScanner(...) list<TResult> getScannerRows(...) void closeScanner(...) void mutateRow(...) list<TResult> getScannerResults(...) |
包含6个文件hbase_constants.cpp/.h、 hbase_types.cpp/.h、THBaseService.cpp/.h,结构的定义都在hbase_types中,服务方法的实现在THBaseService中(关于这几个文件的详细说明,见作者其他博文)。由于我们通常关心数据的查、增、删(对Hbase来说,改是增加一个新“版本”),因此下面的讨论只围绕这些操作展开。
以下是主要涉及的结构及其意义。
Service中有关查数据的函数如下:
Service中有关添加数据的函数如下:
Service中有关删除数据的函数如下:deleteSingle,deleteMultiple,checkAndDelete,这三个与上面的put函数类似,不再论述。
Service中其他的函数如下:
需要注意的是,以上大部分函数都是void,如果操作发生错误,thrift的做法是抛出异常,因此进行操作时应有异常捕获处理。
thrift2接口比较简单明了,当然,实际使用时,会进行或多或少的再次封装,以适应自己的应用需要,对该接口的再次封装,这里不在讨论。
访问文件方式(1)C库I/O函数;(2)系统调用I/O函数1、C文件I/O接口库函数标准C对I/O的概念进行抽象,对于C程序,所有的I/O操作就是移进、移出字节的事情,这种字节流被称为流。可以形象的认为流就是文件。C库函数读取、写入流基本都是完全缓冲,因为I/O函数和磁盘打交道速度太慢,所以就有了一个缓冲区,当缓冲区被塞满的时候,一起打包放入到文件或者设备。这就是完全缓冲。1.文件常量..._如何调试exe程序的i/o接口
转载解决问题自从android5.0推出RecyclerView以后,RecyclerView越来越受广大程序员的热爱了!大家都知道RecyclerView的出现目的是为了替代listview和ScrollView在列表方面的使用!那么listview和ScrollView的所有功能和方法都应该有的!但是RecyclerView的很多方法,不是封装在RecyclerView中的_recyclerview跳转到指定位置
学习目标希望从语音识别开始深入,最后可以开发一个个性化语音合成的系统。这样就可以随时随地可以听你想听到的人说话啦。语音识别的总体思路语音基本单位:帧(Frame)HMM模型:初始状态概率(P(w1))和状态转移概率(P(w2 |w1)、P(w2 |w2))可以用常规的统计方法从样本中计算出来,主要的难点在于发射概率(P(x1 |w1)、P(x2 |w2)、P(x3 |w2))的计算,所以声学模型问题进一步细化到发射概率(Emission Probability) 的学习上,可以通过生成式模型(
1.poj 1579题目链接:http://poj.org/problem?id=1579代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn=1e...
托管平台地址:https://gitee.com/YangYanDeMeiNv/XiangQi小组名称:BRT小组成员合照:没有程序运行方法:双击网页打开就可以程序运行示例及运行结果:其他附加内容:会继续努力转载于:https://www.cnblogs.com/xuhang97/p/7931795.html...
最近的项目中实现订单确定页面。需要使用ScrollView嵌套RecyclerView,当RecyclerView中的item数量比较多时,就会出现item只显示一部分数据,并没有将用户勾选的商品数量全部显示出来,这个时候就需要我们做一下处理了。下面来说两种解决方案:1、使用5.0的新控件NestedScrollView替换ScrollView.NestedScrollView支..._android recyclerview onresume后item显示不全
C:\Documents and Settings\Administrator>w32tm /stripchart /computer:aisa.pool.ntp.orgTracking aisa.pool.ntp.org [180.168.41.175].The current time is 2012-3-7 15:35:23 (local time).15:35:23 err
vue+elementUi 实现密码显示/隐藏+小图标变化(js一共三行代码,其中一行为了美观)...,先给大家展示下效果图,感觉不错可以参考实现代码。【效果图】【html】// 前后代码【略】【js】showPwd () {this.pwdType === 'password' ? this.pwdType = '' : this.pwdType = 'password';let e = doc..._elementui 输入框隐藏
在arcgis中进行坐标转换有两种方法:第一是在ArcToolbox–>数据管理工具模块–>投影和转换–>投影栅格功能,[Toolboxes–>System Toolboxes–>Data Management Tools.tbx–>Projections and Transformations–>Raster–>Project Raster]..._arcgis核对影像偏移
对于采集MySQL 的Binlog并实时解析,我们知道Canal直接对接的消息队列MQ中就包含Kafka组件,那么我们为什么不能直接使用Canal + Kafka + SparkStreaming 架构呢?其实上面的问题答案是可以的。 Canal负责采集 Kafka负责消息传输以及固化 SparkStreaming使用Spark引擎解析日志并提取有用的价值。..._为什么用canal 不用kafka
Unity 通过LineRenderer绘制两点之间的直线;public class Bird:MonoBehaviour{ private bool isClick=false;//判断是否点击鼠标 public float maxDis=3; private SpringJoint2D sp; private Rigidbody2D rg; ...
先用简单的语言来概括一下上下文环境和作用域的区别。00 上下文环境:可以理解为一个看不见摸不着的对象(有若干个属性),虽然看不见摸不着,但确实实实在在存在的,因为所有的变量都在里面存储着,要不然咱们定义的变量在哪里存?另外,对于函数来说,上下文环境是在调用时创建的,这个很好理解。拿参数做例子,你不调用函数,我哪儿知道你要给我传什么参数?01 作用域:首先,它很抽象。第二,记住一句话:除了全局作用域,