JCR和RDBMS数据模型的技术选择

对于Java程序员,在选择数据存储的时候,可能会经常遇到这样的疑惑,究竟该使用JCR引擎,还是直接使用关系型数据库?

有一篇老文章对此作过详尽到位的解释,

https://dev.day.com/content/ddc/blog/2009/01/jcrrdbmsreport/_jcr_content/images/jcrrdbmsreport/jcr_rdbms_report_chapuis.pdf


文中主要提到下面的一些观点:

1、数据模型分为:分层模型(树)、网络模型、关系模型(注:还有现在的key/value键值对),

时至今日,分层/网络模型应用场合逐步萎缩,但仍有价值,如HTML页面DOM结构就是分层模型的典型应用


2、选择数据模型取决于业务的复杂度,是否能提前定义,是否能适应变化


3、数据模型会影响数据处理各个角色的职责(DBA,程序员,用户),对于结构驱动内容的模型,DBA负责结构定义,

对于内容驱动结构的模型,DBA只负责数据完整性、安全、可用、可恢复


4、对于一个house而言,结构是可以清晰定义的,那么关系型数据模型比较适用,

而如果是一个城市,由于一个城市的生态环境很多时候是自然选择、淘汰的过程,其存在很大的变数,所以使用具有动态定义内容结构的模型比较合适

这有点类似于静态语言和动态语言之间的差别,静态语言必须提前定义好类的属性行为,而动态语言ruby/python/php,则可以在运行时动态构造、调用新的属性行为


5、每个模型都有其局限,尽管关系型SQL很强大,但在需要查询整个树状数据时,则需要使用其它模型,另外关系型数据对于版本控制以及访问控制的支持也不好


6、JCR适合数据浏览(Navigation)和版本化信息查询(Versioning),而RDBMS适合复杂联合查询


7、性能不是主要的考虑方面,JCR获取关联数据的复杂度由于其实现是指针浏览,所以为O(1),即和数据量n无关,而关系型数据由于需要从表中匹配某个键值,

所以,理论上如果表中数据为n个,那么复杂度为O(n),但通过建立合适的索引,如b-tree,复杂度可以降低到O(log(n)),还可以再简化索引比较操作,使用合适的hash,达到O(1),(注:由于要建立索引,mysql的数据建立较慢,随机查询则和H2/CRX无多大差别)


下面是比较汇总图:



参考链接:

http://stackoverflow.com/questions/1226325/when-should-you-use-jcr-and-when-should-you-use-jpa-rdbms



by iefreer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值