相关文章推荐
胆小的排球  ·  为 DBA 提供的最重要特性·  2 周前    · 
狂野的麦片  ·  基于 TMDB ...·  1 周前    · 
憨厚的鼠标垫  ·  数组 翻转数组 ...·  1 年前    · 
有情有义的芹菜  ·  ssh server ...·  1 年前    · 
沉稳的筷子  ·  用 .SqlSugar ORM ...·  1 年前    · 

在Jackrabbit存储体系中,PersistenceManager主要用来存储节点的基本属性信息,而二进制数据信息(更确切的说是属性类型为jcr:data的数据,以下称之为文件数据)是通过DataStore来存储的

每个文件数据的ID为它的数字签名,这样便确保了同一个的文件在DataStore中只存在一份拷贝,而在PersistenceManager中,相应的JCR节点只是存储了文件数据的引用ID,而不是它的数据内容,这样在执行节点拷贝操作时,便可以节省磁盘和内存的使用空间。

同时,DataStore还可以在多个Repository之间实现共享,执行数据备份和恢复等操作。

除了优势之外,DataStore也存在相应的局限性:存储在DataStore中的数据是不可改变的

在删除JCR节点的时候,DataStore所对应的文件数据并不会级联删除

对文件数据执行更新操作时,Jackrabbit会将新的文件数据上传到DataStore,然后更新该节点的文件数据引用ID,而之前所引用的文件数据在DataStore中依然存在

所幸,jackrabbit针对DataStore提供了垃圾回收机制,可将不使用的数据文件清除。

预定义DataStore:

Jackrabbit预定义了以下几种类型的DataStore供开发人员使用,分别是:

1.File Data Store(org.apache.jackrabbit.core.data.FileDataStore)

将文件数据存储到本地文件系统上

2.Database Data Store(org.apache.jackrabbit.core.data.db.DbDataStore)

将文件数据存储到数据库中

就访问效率来看,FileDataStore的性能要高于DBDataStore

除此之外,开发人员还可自定义DataStore,来引入额外的存储需求,如:使用HDFS来实现文件数据的分布式存储

要想实现自定义的DataStore,首先需要清楚它的工作流程:

在使用Property.setValue(InputStream stream)方法为节点指定文件数据时,Jackrabbit会首先检测该文件数据的大小,如果大于指定域值(通过minRecordLength配置),将数据存储到DataStore中去,然后在PersistenceManager中保留该文件数据的引用ID,否则,直接将文件数据存储到PersistenceManager体系中

除此之外,还要熟悉DataStore的接口API,及其声明的方法:

org.apache.jackrabbit.core.data.DataStore

getRecordIfStored(DataIdentifier identifier):获取指定identifier对应的文件数据记录,如果记录不存在则返回null

getRecord(DataIdentifier identifier):获取指定identifier对应的文件数据记录,如果记录不存在则抛出异常

addRecord(InputStream stream):添加文件数据到DataStore中

getAllIdentifiers():获取所用文件数据的唯一标识(数字签名)

init(String homeDir):初始化DataStore环境

close();关闭DataStore

getMinRecordLength():获取DataStore能够存储的文件数据的最小值

DataStore配置:

在repository.xml文件中,DataStore通过如下xml配置:

1.FileDataStore

path:为datastore的根目录

minRecordLength:为文件数据的最小值

2.DbDataStore

url:数据库连接地址

user:数据库用户名

password:数据库连接密码

driver:数据库驱动类

minRecordLength:文件数据最小值

copyWhenReading:默认为true,在执行read操作时,会首先拷贝文件数据到临时文件中,供并发读取

如果指定为false,则对文件数据的访问操作是顺序读取

maxConnections:数据库所允许的最大并发连接数

databaseType:数据库类型,DbDataStore主要支持以下几种类型的数据库,分别是:

db2, derby, h2, mssql, mysql, oracle, sqlserver

jack rabbit .apache.org把 Jack rabbit 源代码下载下来,它把各模块分为好几个类包,在本文,我所讲的是 Jack rabbit 的核心包 jack rabbit -core. 无论你以哪种方式来使用 Jack rabbit , jack rabbit -core包必不可少。 jack rabbit -core包负责文件的存储,索引的建立。如果有cluster, core包还要负责 Jack rabbit 集群方面的工作。 在第一篇文章的例子中,我们看到 jack rabbit 中存放数据的流程还是比较清晰的,而且我们也基本确定了其中数据的存储方式,一颗m叉树。 正如db一样,insert都是[color=red]看上去[/color]相对简单的,select相对总是没有这么简单的,如同关系数据库一样,ja... 14.在数据库中存储知识库概述在介绍安装与配置一节时,很重要一点那就是需要设置好规则相关文件库的存储方式。URule Pro规则引擎中规则相关资源文件存储机制采用的是 jack rabbit 实现,默认情况下,我们只需要通过urule.repository.dir属性来指定资源库目录,这样就会在这个目录下以文件形式存储规则相关文件。如果我想将让资源库存储放到当前项目所在目录,比如WEB-INF下的rep... 需要在ClassPath中加入hbase-site.xml这个配置文件 也可以通过hbase.zookeepers这个参数来代替hbase-site.xml配置文件(不推荐) DataStore 创建: Map<String, Serializable> parameters = new HashMap<>(); parameters.put("hbase.cata... 在 Jack rabbit 存储体系中,PersistenceManager主要用来存储节点的基本属性信息,而二进制数据信息(更确切的说是属性类型为jcr:data的数据,以下称之为文件数据)是通过 DataStore 来存储的 每个文件数据的ID为它的数字签名,这样便确保了同一个的文件在 DataStore 中只存在一份拷贝,而在PersistenceManager中,相应的JCR节点只是存储了文件数据的引... https://www.cnblogs.com/chinas/p/6544981.html Pentaho Server 默认内置的是HSQLDB数据库,对于大型生产环境及后续的运维不便利,因此将数据库切换到 MYSQL 。 本文以阿里云RDS( mysql )为目标数据库进行切换。 一、导入数据库文件  1、迁移用脚本 pentaho-server项目已经带了迁移 mysql 用... 其中关系数据存储内部为PostgreSQL,以下文章将介绍在 DataStore 关系数据存储创建企业级地理数据库,具体过程如下: 通过 DataStore 安装路径\ datastore \tools目录下的listadminusers.bat命令程序获取数据库管理员、地理数据库管理员的用户名及密码 修改 Datastore 配置目录下的pgdata/pg_hba.conf,添加连接客户端计算机的 IP 地址,指