关于数据水平切分后的数据库数据查询分页问题

关于数据水平切分后的数据库数据查询分页问题

问题描述:

请教各位高手一个问题,希望有做过这方面的高手给指点一下,多谢!

在一个java项目中,我们的数据库对表进行了切分,比如user表,分成user1,user2,user3……user10,10张表。但是,这样就出现了一个问题,比如我需要查询一个user列表,并在web 页面上分页展示出来,难道要对每张表进行查询,然后把结果集合并?这样会不会存在性能问题呢?能不能用lucene对数据库索引,页面分页显示数据时从lucene取数据呢?这样对列表中的数据排序分页会有问题吗?有什么好的解决办法吗?

希望高手们给详细指点一下,先谢谢啦!

老兄能详细说说是怎么做的吗?比如这个用户列表页面上需要按不同的字段分页排序显示出来,用lucene会不会有问题?还有就是修改了某一条数据后,在列表页面上展示的实时性问题怎么解决?
请老兄详细指点一下,最好举个例子

1、排序不存在问题,lucene本身就有这个功能
2、实时性不是问题,你每做更新操作的时候,就更新索引。没有实时性问题。

创建一个视图。视图的定义就是这10张表。查询的时候操作改视图表就行

切分是要有依据的。
比如:命名规则或是时间段,查询的时候根据规则映射到哪一张表。

这个个人觉得跟lucene没什么关系吧。你要数据只是查询表,并非检索。感觉lucene用在这里不合适。如果你的表切分的合理,那么应该不存在频繁的仍旧需要查询所有表的情况。所以可以根据业务考虑下考虑切分,尽量让切分符合大多查询时可以精确那个分表的情况。

全局查询优化策略有两种:一是静态化优化,即在事务执行前优化;二是动态化优化,根据实际的中间执行结果边执行边优化。

物化视图~

你用lucene完全可以,我曾经用过,你可以用solr,做索引很简单。这样还可以提高你搜索的易用性,如果你的数据量真的需要分那么多表的情况先,用文件索引的的方式决定可以解决一切问题,降低数据库的压力

[quote]老兄在实际项目中使用过这种方法吗?如果没问题我想试试[/quote]
[quote]如果我100张表做视图会不会有性能问题呢?[/quote]

lucene没有用在这种情况下,一般都是用在全文检索(全网站检索)上了。切分表的情况也是根据数据录入实际那进行的。

其实不管你是多少表做视图都是一样的。其性能的影响还是要看每张表的查询了。视图只是一个定义,本身并没有数据产生。 100张表的数据因为你要分页,那么也不是全部都一次性取出了,因此只要数据量合适,表本身索引合理的话,其实是没有问题的。如果不建立视图,而是对100张表进行独立查询那么用视图一句SQL可以搞定的问题在这种情况下就得需要100条SQL了。

使用lucene本身也是建立索引,这个可以具体查下资料。

如果业务查询不是很复杂,还是用view试试。应该速度不会慢的。

建议你用solr,底层用的lucene,有人已经替你封装好了,用起来很方便,半小时就能搞定。

你分了100张子表,同时可以保留总表,如果你的查询范围可以预见在某个子表内,那就查询子表,如果查询的条件超出子表则要查询总表(性能上会慢一点,可以通过索引来优化)。lucene一般是做全文检索使用的,solr倒是不错的选择,但是没有必要再分表了。