tso*_*akp 6 hbase hibernate terracotta mongodb nosql
我正在研究一个项目,我们是批量加载并在Oracle数据库中存储大量数据,这些数据经常通过Hibernate对这个1亿多个记录表进行查询(读取比写入更频繁).为了加快速度,我们使用Lucene进行一些查询(尤其是地理边界框查询)和Hibernate二级缓存,但这仍然不够.我们仍然遇到针对Oracle的Hibernate查询的瓶颈(由于缺少那么多内存,我们不会在Hibernate二级缓存中缓存超过1亿个表实体).
在这种情况下我可以利用哪些额外的NoSQL解决方案(除了Lucene)?
我想到的一些选择是:
使用分布式ehcache(Terracotta)用于Hibernate二级,以跨机器利用更多内存并减少重复缓存(现在每个VM都有自己的缓存).
要在内存中完全使用像H2这样的SQL数据库,但不幸的是,这些解决方案需要将100多万个表加载到单个VM中.
使用Lucene进行查询,使用BigTable(或分布式hashmap)进行实体查找.什么BigTable实现适合这个?我在考虑HBase.
使用MongoDB存储数据以及通过id查询和查找.
推荐使用ElasticSearch的Cassandra实现可扩展的系统(1亿对他们来说没什么).对于所有数据使用cassandra,对于临时和地理查询使用ES.然后你可以杀死整个遗留堆栈.您可能需要像rabbitmq这样的MQ系统来实现Cass之间的数据同步.和ES.
您可以对请求进行分组并将其拆分为一组特定的数据,并拥有一个(或一组服务器)进程,在这里您可以在缓存中提供可用的数据以提高性能。
例如,
例如,员工和可用性数据使用 10 个表进行处理,当您配置 Hibernate 缓存来加载和处理请求时,可以通过一小组服务器来处理这些数据。
为此,您需要一个负载均衡器(按业务场景平衡负载)。
不确定这里可以实现多少。