我面临着使我们的软件堆栈可扩展的任务。它目前无法扩展,因为所有内容都集中在一个庞大的中央Oracle数据库中。每个人都访问它,所以它总是很忙,更重要的是,由于担心丢失数据,数据库文件直接写入netapp,因此磁盘访问速度很慢。
我们在使用noSQL解决方案与其他任务方面取得了成功,因此我们正在考虑它们。但有一个问题是,当前代码在很大程度上依赖于Hibernate,因为您可以轻松遍历业务对象图,而无需担心加载引用的对象。
对于noSQL目前还没有这样的Hibernate驱动程序;即使有问题,noSQL的一个问题是它们都不支持JOIN,因此无法实现高效的JOIN FETCH,并且您将不得不花几次去商店来获取相关对象。因此,我倾向于认为noSQL仅适用于具有独立对象的项目,而不是复杂的对象图。
有什么想法吗?
答案 0 :(得分:2)
我建议尝试将Infinispan作为分布式二级缓存。这将允许您对应用程序服务器进行集群,并仍然将数据缓存在读取繁重的应用程序中。
此guide对于开始使用此步骤非常有用。您还需要确保使用JTA事务管理。
答案 1 :(得分:2)
另一个新尝试的是playOrm,其中包含JQL / HQL BUT,并进行一些更改以使其与noSql兼容(即,您需要对1万亿行表进行分区,以便您可以使用其他内容加入1个分区)。它完成所有ManyToOne,OneToMany等等。
还有其他一些差异,比如一个findAll方法,这在noSql中是典型的,可以一次抓取100行,因为它与许多服务器并行完成。
可扩展的JQL查询示例(请注意分区ID,因为您的交易可能通过帐户划分或对您的域有意义的内容)。
@NoSqlQuery(name =“findJoinOnNullPartition”,query =“PARTITIONS t(:partId)select t FROM TABLE as t INNER JOIN t.security as s where s.securityType =:type and t.numShares =:shares”)