海量数据查询问题(百万条记录)

面试中被问到Hibernate中如何查询一个有百万条记录的表。由于项目中都没碰到过这种情况,所以答不出来。求高手指教!

mysql一张表存储百万条数据的公司,,不去也罢,
或许人家只是想问你懂不懂hbase等分布式存储,,
在关系型数据库中,查询一张百万条数据的表,一条语句跑几个小时是很正常的,,

分页查询,用sql的各种关键字

自我感觉你可以根据字段进行建立索引,在使用关键字进行查询

这个问题分两个方面上看。
一个层面是数据库优化层面,这个就不是Hibernate的问题了,而是数据库的问题。单表百万数据并不算特别多,查询时利用合适的索引,一样可以达到较快的效率。如何设置索引也是门学问。一般来说要根据你业务中查询最频繁的场景,通过设置单列索引或者组合索引来优化。
还一个层面就是hibernate的使用方面。对于查询量较大的,可以使用分页查询去减轻每次查询的数量。建议使用spring data jpa和hibernate去集成,提供了非常方面的分页机制和一些其他特性。对于一些读多而写很少的数据,可以考虑引入缓存来优化。hibernate本身默认提供ehcache实现的二级缓存结构。你也可以使用一些集中式缓存工具去在业务层面去处理,memcache,redis等等。

获取session,进行基本的 curd ,查询大量数据的时候并不影响,如果要进行高并发处理,一是sql优化,二是加入缓存,

分库分表分区(主从复制,集群),分页拦截

推荐你看一下这篇博文。
http://blog.csdn.net/en_joker/article/details/78161898

单表百万,对于现在的数据库系统来说很容易,根据过滤条件(where)设置好索引即可。