日期:2014-05-16  浏览次数:20501 次

无关联,高缓存数据库存储方式

公司现在使用的方式,这种方式或许并不好,但是使用上还是很方便

?

主要由几个部分组成

1. 数据库表

2. 存储过程

3. 数据库表结构类

4. 数据库访问

5. 缓存

6. 组装器

?

1. 数据库表

?? ?主要用来存放数据,可以按一般的情况来进行存储,也就是,每个字段都是不同的类型,但是也可以使用极端的情况来实现,即,表内所有字段均为String,而具体的转换过程由程序来实现,在这里默认使用全String的形式进行存储.

?

技巧

?? ?a.?所有的表之间不存在任何数据库关联,只存在数据关联,即一个表中某个字段为另外一个表字段的值

?? ?b. 部分内容如果包括的东西比较多的话,使用"-1;2,1,0,2;5,1,150,0,1,0,1,26,2,26,3,26,4,26,5,26,6,26;0"的形式进行存储.然后由程序进行分解转换,组合.这样在某些情况下可以简化数据库结构吧

?

2. 存储过程

?? ?在本结构中所有数据库操作均以存储过程的形式进行访问.其中包括数据的查询,修改,删除等.

具体原因(猜测):

?? ?a. 简化数据库访问时的代码,不至于在进行数据库访问的时候存在很多的SQL语句

?? ?b. 使用存储过程可以对数据库操作进行一定的优化

?? ?c. 在存储过程中实现一些简单的逻辑,简化程序的复杂度

?? ?d. 提高性能

其它:

?? ?可能有同学会觉得使用hibernate,ibatis,nutzDAO不是很方便吗?确实,使用这些都非常的方便,但是,性能上不够好,hibernate它会给你进行自动封装,如果再使用自动关联的话,那样就会损失很多的性能,所以,一般高性能要求的情况,个人建议还是不要这样使用.

?

3.?数据库表结构类

?? ?前面说到在进行访问的时候是直接使用JDBC的形式进行访问,而非hibernate的方面,所以当进行一次查询的时候返回的是一个ResultSet,而要取到ResultSet内的内容,要么使用数字编号,要么使用列名,而数据库表结构类的作用就是实现这样的功能.

?

示例:

user表:

id,name

?

user_table类:

public static String id = "Id";

public static String name = "name"

?

4. 数据库访问

?? ?在进行数据库访问的时候直接使用JDBC或是使用Spring自带的JdbcDaoSupport进行访问,以提供最大限度的速度.

?

5. 缓存

?? ?数据库的操作在程序上永远是一个性能瓶颈,所以要想提交性能,那么使用缓存吧,然而,我们这里之所以使用缓存,除了性能的原因以外,还有另外一个原因,那就是构建关系,这一点下面会说到.

?

6. 组装器

?? ?组装,关联数据,在数据库中存放的都是最原始的,没有任何关联的.而且是不能使用的数据,所以在这里引入这个组装器的概念,它的主要作用就是装从数据库中读取的内容进行重新组装,分解,关联,以使这些数据恢复成原来的结构.

主要职责:

?? ?a. 进行类型转换,将string转换成int等其它类型

?? ?b. 分解某些组合属性,将数据库中的String转换成List,array等其它类型

?? ?c. 填充缓存

?? ?d. 进行关联.将某个int性的属性通过其它实体的缓存获取到真实实体,然后进行关联.

技巧:

?? ?在设计实体类的时候,如果有一个List,而要将它存放成String,那么就在实体中使用两个类型不一样的属性