10bet网址
MySQL NDB集群API Developer Guide
本手册下载

2.3.13 NDBBLOB类

本节提供有关的信息ndbblob.类,模型到Blob列的句柄,并为Blob列值提供读写访问。该对象具有许多不同的状态,并提供了多种访问BLOB数据的访问方式;这些部分也在本节中描述。

NdbBlob类概述

父母类

没有任何

儿童课程

没有任何

描述

此类没有公共构造函数。一个例子ndbblob.是使用的ndboperation :: getblobhandle()操作准备阶段的方法。(见第2.3.20节“Ndboperation类”。)这个对象作为一个手柄斑点柱子。

方法

下表列出了此类的公共方法以及每个方法的目的或使用:

表2.33 NDBBLOB类方法和说明

名称 描述
blobsfirstblob() 获取列表中的第一个斑点。
blobsnextblob() 获取列表中的下一个blob
关闭() 在提交或中止之前发布内部资源
getBlobEventName () 获取blob事件名称
getblobtableName() 获取Blob数据段的表名。
getcolumn() 获取一个blob列。
getLength () 获取斑点的长度,以字节为单位
getndberror() 得到一个错误(一个ndberror.目的)
getNdbOperation () 获取指向操作的指针(ndboperation.对象)这个ndbblob.对象创建时所属的。
getNull () 检查是否是Blob值是空值
getPos () 获取当前阅读/写作的立场
GetState() 的状态ndbblob.对象
getValue() 准备阅读Blob值
getVersion() 检查blob是基于语句的还是基于事件的
readData () 从blob读取数据
setActiveHook () 定义Blob Handle Activation的回调
setnull() 设置一个blob空值
setPos () 设置开始阅读/写作的位置
setValue () 准备插入或更新BLOB值
截短() 将一个blob截断到给定的长度
writedata() 写入Blob数据

getblobtableName()getBlobEventName ()是静态方法。

最多ndbblob.方法(几乎所有返回类型的人) 返回0成功和-1万一失败。

类型

由...定义的公共类型ndbblob.这里显示:

表2.34 NdbBlob类型及描述

名称 描述
activehook() 回调NdbBlob: setActiveHook ()
状态() 代表可能由此假设的状态ndbblob.

BLOB数据存储。斑点数据存储在2个位置:

  • 头和内联字节存储在blob属性中。

  • Blob的数据段存储在命名的单独表中ndb $ blob_tid_cid, 在哪里tid是表ID,以及cid是blob列ID。

可以使用适当的设置内联和数据段大小柱子方法创建表时。看到第2.3.1节“列类”第2.3.1节,有关这些方法的更多信息。

数据访问类型。ndbblob.支持3种类型的数据访问:这些数据访问类型可以组合应用,只要它们按照上面给出的顺序使用。

BLOB操作。斑点当执行下一个事务时,操作生效。在某些情况下,ndbblob.强制执行隐式执行。为了避免这种情况,您应该始终对完整的blob数据段进行操作。

NdbTransaction: executePendingBlobOps ()刷新读和写,如果没有挂起的操作,这样可以避免任何执行惩罚。在执行操作之后或在下一次扫描结果之后,这是不必要的。

ndbblob.还支持从事件中读取博客或预先绘制的数据。可以在检索主表上的下一个事件后读取句柄。数据立即可用。(见第2.3.16节“Ndbeptoperation类”,以获取更多信息。)

Blobs和ndboperations。ndboperation.方法作用ndbblob.对象具有以下特征:

  • NdbOperation: insertTuple ()必须使用ndbblob :: setValue()如果是斑点属性是不属的。

  • NdbOperation: readTuple ()与任何锁定模式一起使用可以读取但不是写入BLOB值。

    当。。。的时候lm_commitedread.锁定模式使用readtuple(),锁定模式自动升级到LM_Read每当blob属性被访问。

  • NdbOperation: updateTuple ()可以覆盖现有的值使用ndbblob :: setValue()或在活动阶段期间更新它。

  • NdbOperation: writeTuple ()始终覆盖blob值,必须使用ndbblob :: setValue()如果是斑点属性是不属的。

  • NdbOperation: deleteTuple ()创建隐含,不可访问的斑点把手。

  • 任何锁定模式的扫描都可以使用它的blob句柄来读取blob值,但不能写入它们。

    使用扫描lm_exclusive.锁定模式可以使用锁定模式updatecurrenttuple();返回的操作必须明确创建自己的blob句柄。

    使用扫描lm_exclusive.锁定模式可以删除行值(因此,因此blob值)使用deleteCurrentTuple ();这创建了隐式不可访问的Blob句柄。

  • 返回的操作lockCurrentTuple ()无法更新blob值。

已知的问题。以下是在使用时遇到的已知问题或限制ndbblob.对象:

  • 太多了待审斑点操作可以溢出I / O缓冲区。

  • 桌子和它的斑点数据段表不是由原子创建的。

ndbblob :: Activehook.

ActiveHook是一个定义的数据类型,被用作回调setActiveHook ()方法。(见NdbBlob: setActiveHook ()。)

定义。activehook.是定义的自定义数据类型如下所示:

typedef int activehook(ndbblob *, void *arg)

描述

这是一个回调NdbBlob: setActiveHook (),并立即调用一次准备好的操作(但未提交)。任何电话getValue()或者setValue ()首先进行。的斑点手柄是活跃的readData ()或者writedata()可用于操纵斑点价值。与用户定义的参数一起传递ndbblob.setActiveHook ()在错误的情况下返回非零值。

ndbblob :: blobsfirstblob()

描述

此方法初始化属于当前操作的BLOB列表,并返回列表中的第一个BLOB。

签名
ndbblob * blobsfirstblob(void)
参数

没有任何

返回值

一个指向所需blob的指针。

ndbblob :: blobsnextblob()

描述

使用该方法获取使用的BLOB列表中的下一个blobsfirstblob()。看到ndbblob :: blobsfirstblob()

签名
ndbblob * blobsnextblob(void)
参数

没有任何

返回值

一个指向所需blob的指针。

ndbblob :: close()

描述

关闭BLOB句柄,在提交或中止事务之前释放内部资源。换句话说,应用程序已经完成了从给定的BLOB读取的信号。只有在blob的时可以调用此方法状态积极的

签名
int close(boolexecPendingBlobOps=真的)
参数

此方法具有单个布尔参数execPendingBlobOps。如果此参数的值真的(默认值),在Blob句柄关闭之前刷新任何挂起的BLOB操作。如果execPendingBlobOps,然后假设BLOB句柄没有待读取或写入操作来刷新。

返回值

成功。

读取操作和锁定。在使用读取操作上创建Blob句柄时LM_Read或者lm_exclusive.随着LockMode,只有关闭在此操作上创建的所有Blob句柄后,读取操作才能解锁。

当用锁模式读取包含blob的行时lm_commitedread.,模式自动升级为LM_Read确保一致性。在这种情况下,当所有Blob句柄已关闭时,将通过呼叫自动执行该行的解锁操作关闭()方法,将待处理的写入操作添加到BLOB中。升级的锁被呼叫后释放执行()

ndbblob :: getblobeventname()

描述

此方法获取Blob事件名称。如果主事件监视blob列,则会创建blob事件。该名称包括主事件名称。

签名
static int getblobeventname(char *名称,ndb *NDB.,const char *事件,const char *)
参数

此方法在此提出以下四个参数:

  • 名称:Blob事件的名称。

  • NDB.:相关NDB.目的。

  • 事件:主事件的名称。

  • :Blob列。

返回值

0成功,-1在失败。

NdbBlob: getBlobTableName ()

描述

此方法获取BLOB数据段表名。

该方法通常仅用于测试和调试目的。

签名
static int getBlobTableName (char* . txt名称,ndb *NDB.,const char *桌子,const char *)
参数

此方法在此提出以下四个参数:

  • 名称:BLOB数据段表的名称。

  • NDB.:相关NDB.目的。

  • 桌子:主表的名称。

  • :Blob列。

返回值

回报0成功,-1在失败。

ndbblob :: getColumn()

描述

使用这种方法来获得斑点柱子ndbblob.属于。

签名
const列* getcolumn(void)
参数

没有任何

返回值

一个柱子目的。

ndbblob :: getLength()

描述

此方法以字节为单位获得Blob的当前长度。

签名
int getLength(UINT64&长度)
参数

对长度的引用。

返回值

斑点的长度(以字节为单位)。对于一个空值Blob,这个方法返回0。区分长度的斑点0blob和一个是空值,可以使用getNull ()方法。

NdbBlob: getNull ()

描述

此方法检查blob的值是否为空值

签名
gettnull (int&isNull)
参数

对整数的引用isNull。调用后,此参数具有以下值之一,解释如下所示:

  • -1:Blob未定义。如果这是一个不受欢迎的斑点,则此结果会导致状态错误。

  • 0: blob具有非空值。

  • 1: blob的值为空值

返回值

没有任何

ndbblob :: getndberror()

描述

使用此方法获取错误对象。错误可以是特定于闪烁的,或者可以从失败的隐式操作复制。除非操作已具有非零错误代码,否则错误代码将复制回操作。

签名
const NdbError& getdberror (void
参数

没有任何。

返回值

一个ndberror.目的。

ndbblob :: getndboperation()

描述

此方法可用于找到该操作的操作ndbblob.是相关的。

签名
const NdbOperation* getdboperation (void) const
参数

没有任何

返回值

一个指向操作的指针。

方法返回的指针所引用的操作可以用ndboperation.或者NdbScanOperation目的。

看到第2.3.20节“Ndboperation类”, 和第2.3.24节“ndbscanoperation类”,以获取更多信息。

NdbBlob: getPos ()

描述

这个方法获取一个blob中的当前读/写位置。

签名
int getPos (Uint64&p)
参数

一个参数,对位置的引用。

返回值

回报0成功,或-1在失败。(成功调用后,p将在Blob中持有当前读/写位置,从一开始就是一个字节数。)

ndbblob :: getState()

描述

此方法获取当前状态ndbblob.调用它的对象。可能的状态描述于NdbBlob:状态

签名
国家GetState(无效)
参数

没有任何。

返回值

类型的值状态

ndbblob :: getValue()

描述

使用此方法准备读取BLOB值;该值可在调用后可用。用getNull ()检查空值价值;用getLength ()要获得BLOB的实际长度,并检查截断。getValue()将当前读/写位置设置为读取的数据结束后的点。

签名
INT GetValue(void *数据,UINT32字节)
参数

此方法接受两个参数。控件的指针数据阅读;第二个是字节被读。

返回值

0成功,-1在失败。

ndbblob :: getVersion()

描述

此方法用于区分Blob操作是否是基于语句的或基于事件的。

签名
void getVersion (int&版本)
参数

此方法采用单个参数,对BLOB版本的整数引用(操作类型)。

返回值

以下三个值之一:

  • -1: 这是一个普通的(statement-based)团。

  • 0:这是一个基于blob的事件操作,跟随其数据的更改。

  • 1:这是一个基于事件操作的Blob,在其数据的任何变化之前。

getVersion()始终成功,假设它被调用为有效实例的方法ndbblob.

ndbblob :: ReadData()

描述

此方法用于从BLOB读取数据。

签名
int readData (void*数据,uint32&字节)
参数

readData ()接受指向的指针数据要读,并注明编号字节读。

返回值

回报0成功,-1在失败。在成功的调用之后,数据指向已读取的数据,以及字节保存读取的字节数。

NdbBlob: setActiveHook ()

描述

此方法定义BLOB句柄激活的回调。准备好操作的队列将以NO-COMMIT模式执行到此点;然后,调用回调。有关其他信息,请参阅ndbblob :: Activehook.

签名
int setActiveHook (ActiveHook* . getactivehookactiveHook, void *arg)
参数

这个方法需要下面列出的两个参数:

  • 指向activehook.

  • 一个指向空白,对于要传递给回调的任何数据。

返回值

0成功,-1在失败。

ndbblob :: setnull()

描述

此方法将BLOB的值设置为空值

签名
int setNull (void)
参数

没有任何

返回值

0在成功;-1在失败。

NdbBlob: setPos ()

描述

此方法将诸如读取或写入数据的BLOB内的位置设置。

签名
int setpos(Uint64p)
参数

setPos()方法采用单个参数p(一个未签名的64位整数),这是读取或写入数据的位置。的价值p一定是之间0和Blob的当前长度。

重要的

NDB API不支持BLOB;换句话说,BLOB中不能没有未使用的数据位置。

返回值

0成功,-1在失败。

ndbblob :: setValue()

描述

该方法用于准备插入或更新BLOB值。截断的任何现有的BLOB数据超过新数据。在执行操作之前,数据缓冲区必须保持有效。setValue ()将当前读/写位置设置为数据结束后的点。你可以设置数据到空指针(0),以便创造空值价值。

签名
int setvalue(const void *数据,UINT32字节)
参数

此方法在此列出的两个参数:

  • 数据将插入或用于覆盖blob值。

  • 的数量字节- 是,长度数据

返回值

0成功,-1在失败。

NdbBlob:状态

这是一个枚举数据类型,它表示可能的状态ndbblob.实例。

描述

一个ndbblob.可以假设任何一个国家

枚举值

在下表中显示可能的值以及描述:

表2.35 NdbBlob::State类型的值和描述

名称 描述
空闲 ndbblob.尚未准备与任何操作一起使用。
准备好 这是国家的状态ndbblob.在操作执行之前。
积极的 这是斑点处理后执行或获取下一个结果,但在事务提交之前。
关闭 在承诺交易后发生此状态。
无效的 这遵循回滚或交易结束。

ndbblob :: truncate()

描述

此方法用于将BLOB截断到给定长度。

签名
int truncate(uint64长度= 0)
参数

截短()采用单个参数,指定新的长度截断的blob要截断。这种方法没有影响长度大于blob的当前长度(您可以使用getLength ())。

返回值

0成功,-1在失败。

ndbblob :: writedata()

描述

该方法用于将数据写入ndbblob.。在成功调用之后,读/写位置将在写入BLOB的数据之后的第一个字节。

写入超过blob数据的当前端自动扩展blob。

签名
int writeData (const void*数据,UINT32字节)
参数

此方法接受两个参数,一个指向数据写的,和数量字节来写。

返回值

0成功,-1在失败。