数据库分库分表
分表
访问极为频繁且数量巨大的单表,可以考虑减少单表的记录条数,以便减少数据查询所需要的时间,提高数据库的吞吐。
两种方式:
1.Param注解
dao:将表名传入
public int save(@Param("table") String table, @Param("name") String name, @Param("gender") Integer gender);
mapper.xml ”$”动态传入表名 “#”传入列值,传入map
<insert id="save" parameterType="Map">
insert into ${table} (name,gender)values(#{name},#{gender})
</insert>
ps: $不对变量进行转义 #会对变量进行转义
2.Model && Map
model:
public class User {
private Long id;
private String table;
private String name
private Integer gender;
....getter setter
}
dao:
public int save(User user);
mapper.xml
<insert id="save" parameterType="User">
insert into ${table} (name,gender)values(#{name},#{gender})
</insert>
ps:
- 运价库的表是根据航班起飞日期来分的
分库
分表能够解决单表数据量大带来的查询效率下降的问题,但是却无法给数据库的并发处理能力带来质的提升。高并发的读写访问,可以考虑分库。
db-context.xml
<bean id="parentDatasource" class="xxxxx" destroy-method="close">
...
</bean>
<bean id="dataSource1" parent="parentDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/simple"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="dataSource2" parent="parentPoolDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/simple2"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean name="dynamicDataSource" class="com.xxx.web.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSource1" key="xxx1"/>
<entry value-ref="dataSource2" key="xxx2"/>
</map>
</property>
</bean>
...
DynamicDataSource.java
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return AppContext.getContext();
}
}
AppContext.java
public class AppContext(){
private static InheritableThreadLocal<String> context = new InheritableThreadLocal<String>();
public static void setContext(String context){
AppContext.context.set(context);
}
public static String getContext(){
return AppContext.context.get();
}
}
ps:
- 官网代购和国内旗舰店都是按照航司来分库滴
分库分表
有时数据库即可能面临高并发的压力,有需要面对海量数据的存储问题,可以考虑分库+分表。
- 上一篇 vi
- 下一篇 关于spring的几个问题