论坛首页 Java企业应用论坛

一个支持数据库分布式访问的小框架(更新5)

浏览 23074 次
精华帖 (0) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-02  
只是一点想法,没有真正实践过。新换了一家公司,磨合阶段没事儿干,看公司的读写分离还是硬编码在程序中,所以产生了这个念头!
0 请登录后投票
   发表时间:2012-05-02  
aa87963014 写道
思路和我的freyja相识
http://freyja.iteye.com/blog/1412191、
不过经过封装,只需要在需要分库的用annotation标记就行了,执行sql的时候会解析表达式,然后根据annotation注解确定其所在的库、表。


annotation是我下一步的工作,以前已经做过一个框架使用annotation来标注解析器,以及轻量级的orm。当时的框架感觉不够轻。所以分出来这个halo-dal框架。目的就是要实现 使用其他框架也能解决分布式访问的问题。
0 请登录后投票
   发表时间:2012-05-02  
xiaoZ5919 写道
我的读写分离 基于spring+mybatis,大致一样也是基于lazyconnectionProxy。
http://xiaoz5919.iteye.com/blog/1497223


兄弟,你我的思路非常像,要是支持事务就更好了。有空我们可以交流一下。。
0 请登录后投票
   发表时间:2012-05-02  
白云飞 写道
非常不错,关注学习下

谢谢关注,多提意见
0 请登录后投票
   发表时间:2012-05-02  
ak478288 写道
xiaoZ5919 写道
我的读写分离 基于spring+mybatis,大致一样也是基于lazyconnectionProxy。
http://xiaoz5919.iteye.com/blog/1497223


兄弟,你我的思路非常像,要是支持事务就更好了。有空我们可以交流一下。。

好的,我先研究一下仁兄的代码!私信联系
0 请登录后投票
   发表时间:2012-05-02   最后修改:2012-05-02
ak478288 写道
kimmking 写道
如何路由呢?
就是说对建表有什么要求,对sql有什么要求,如何路由


  解析器的编写,并不会入侵到业务代码中


  我觉得已经侵入到业务代码中了 
ak478288 写道

    和普通建表方式没有区别。

     简单举例:
     sql:  select * from user where level=1 order by xxxx;
    假如需要根据level的值进行分表,那么level条件就需要在表达式中,并且有值.
 

 
   如果我们需要对用户ID进行检索,需要对地区字段进行group by,需要.....这个时候可能我们需要对用户表重载N个parse方法....

   如果能够在APP和DB之间建立一层Proxy,这个Proxy的功能假设有以下几点
 
   1) 能够跨数据库...这个功能替代了ORM框架,好处在于我们只需要链接这么一个数据源,方便维护,至于去链接mysql还是oracle、链接哪个模块的数据源,只是参数不同而已,这些都可以在Proxy上面配置。
   2) 可以实现主从读写分离,之前我们如果想要实现读写分离必须得在App上面维护它们各自的IP,但现在只需要Proxy上面维护即可,好处同上
   3)可以考虑用key-value结构来存储“关键”属性,这样做为了实现分库分表,不好的地方时写入的成本更高,如果前端有缓存或者不需要实时数据可以考虑异步批量写入
   4)把涉及到事务、锁的问题都放这里来做吧,业务代码会变的很干净
   5).....大家补充

   意淫下而已~~~
0 请登录后投票
   发表时间:2012-05-02  
程序新手 写道
ak478288 写道
kimmking 写道
如何路由呢?
就是说对建表有什么要求,对sql有什么要求,如何路由


  解析器的编写,并不会入侵到业务代码中


  我觉得已经侵入到业务代码中了 
ak478288 写道

    和普通建表方式没有区别。

     简单举例:
     sql:  select * from user where level=1 order by xxxx;
    假如需要根据level的值进行分表,那么level条件就需要在表达式中,并且有值.
 

 
   如果我们需要对用户ID进行检索,需要对地区字段进行group by,需要.....这个时候可能我们需要对用户表重载N个parse方法....

   如果能够在APP和DB之间建立一层Proxy,这个Proxy的功能假设有以下几点
 
   1) 能够跨数据库...这个功能替代了ORM框架,好处在于我们只需要链接这么一个数据源,方便维护,至于去链接mysql还是oracle、链接哪个模块的数据源,只是参数不同而已,这些都可以在Proxy上面配置。
   2) 可以实现主从读写分离,之前我们如果想要实现读写分离必须得在App上面维护它们各自的IP,但现在只需要Proxy上面维护即可,好处同上
   3)可以考虑用key-value结构来存储“关键”属性,这样做为了实现分库分表,不好的地方时写入的成本更高,如果前端有缓存或者不需要实时数据可以考虑异步批量写入
   4)把涉及到事务、锁的问题都放这里来做吧,业务代码会变的很干净
   5).....大家补充

   意淫下而已~~~


的确存在你说的这种情况,有时候需要对数据做汇总操作。这个时候是分区条件是不起作用的。

相当于对每个分区都要进行汇总操作。这个时候,不入侵很难做到完美(也许有,但是我没有想到)。只能说需求不同,用不同的实现方式,目前这个框架能做到的就是进行分区上的查找。你说的汇总方式与业务有关,需要针对这种业务进行考虑如何使用。

框架中也提供了直接指定数据源的方案,不过文档中还没有写出来。

只能说尽量避免这种汇总操作吧,如果避免不了,只能是做一些巧妙的处理方案了。

至于你说的Proxy,目前我暂且称为 DALServer吧,我已经开始在做这个东西了,还在研究协议的问题。

感谢你提出的场景。

0 请登录后投票
   发表时间:2012-05-02  
修改了帖子,增加了小结
0 请登录后投票
   发表时间:2012-05-02  
我们也在做DAL,初步的想法是所有的数据关系维护在内存的二维表中,每一种数据源对应一个adapter,需要自己实现sql parse 。有一些跨表 跨库的查询比较复杂,而且涉及到数据冗余还需要数据权重配置。
0 请登录后投票
   发表时间:2012-05-02  
chrrity 写道
我们也在做DAL,初步的想法是所有的数据关系维护在内存的二维表中,每一种数据源对应一个adapter,需要自己实现sql parse 。有一些跨表 跨库的查询比较复杂,而且涉及到数据冗余还需要数据权重配置。


尽量避免跨库 跨表查询 ,尽可能从业务上避免,不行就用其他的方式。

个人认为,只要要抓住根本问题,就是如何选择数据源,从这个点进行出发,就能解决问题。千万不要考虑跨表跨库的操作,这些问题可以通过业务上避免的。

程序设计尽量简单,然后可以接口化,随时替换为更好的方案

(目前halo-dal就能让自己写sql解析替换我的默认解析^_^)

欢迎交流思想,哈哈
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics