我目前正在为替代数据存储开发概念验证。我之所以需要增强一个主要是读取群集的webapp,还因为我想摆脱有时overly-complex ORM+RDBMS solution的痛苦。
总的来说,这个想法非常类似于具有持久性的分布式缓存 (让集群成为SoR),但是:
我打算用Hazelcast(我喜欢它超级简单的API)或Terracotta(我从未使用过 - 但我知道他们的'甜蜜点',中期数据)来实现这个想法。如果你愿意,我的目标是做更多或更少what Jonas once blogged about。使用其中一个,存储的数据大致必须适合集群的JVM堆的总和。
这应该非常简单,可以避免关系阻抗不匹配(即与ODB一样保存)和JDBC + I / O开销。
您是否知道已经提供类似功能的其他工具/框架或其组合,我忽略了? 你能否提出其他方法来解决这个“摆脱数据库”的问题?你在这个想法中已经看到了什么缺陷? 并发性是否考虑Scala而不是Java?
如Couch DB,Neo4j,HyperTable,HBase等非关系型数据存储怎么样?
一个月前曾问过similar question - 但没有具体的解决方案。
BTW我偶然发现Enterprise Data Fabric的概念,令我惊讶的是,它描述了很多这些想法。
答案 0 :(得分:2)
一定要试试Terracotta。它是免费的(除非你去拥有SLA和支持的Enterprise)。它是一个JVM级别的集群,可以这么说,所以你没有与不同JK工作者背后的多个框上的会话相关的问题(假设你将它用于J2EE应用程序)。
我只是漫无目的,所以看看这里:http://en.wikipedia.org/wiki/Terracotta_Cluster
更新关于网上Terracotta的大量信息,例如http://blog.terracottatech.com/2007/12/fud_of_the_week_terracotta_doe.html
UPDATE2 我的观点背景:我为一家拥有相当多观众的公司工作。我们有一个使用主服务器运行的企业MySQL和大约5个从服务器(考虑到我们有2个通道,每个通道有4个app服务器),使用MySQL的JDBC Replication驱动程序(我们已经提交了各种补丁)。我们使用Spring的声明性JTA事务管理来使用Spring2.5 / Hibernate3,因此read-onlies会转到slave。随着我们网站未来版本的众多Ajax增强功能的出现,我们的数据库服务器的负载已经增加 - 我们为所有国家的数千种产品创建定价摘要,同时考虑了所有这些国家的关税/税收规则(以及促销活动)和实时拍卖一直运行),然后Ajax服务眨眼间有最新的价格。通过将这些价格提供给JVM层上的所有应用服务器,Terracotta可以减轻数据库和应用服务器的负担,并且所有JVM都可以链接在一起。因此,服务器A可以每隔几分钟更新一次价格,如果Ajax点击服务器B,价格立即可用。我知道有些人/公司有类似的业务,可能有更好的想法和实施,所以我总是开放讨论,但这是我的两分钱。
我也从Facebook上的人那里获得灵感,例如这篇内容非常丰富的文章: http://www.facebook.com/note.php?note_id=23844338919
他们谈论memcached,你也应该检查一下。
答案 1 :(得分:2)
问题中提到了Neo4j,在这种情况下,我想到了一些关于使用图形数据库的想法。 (我是Neo4j团队的一员)
随着今天出现的新数据库技术的出现,如果您的数据不适合关系范例,则无需继续使用RDBMS。
答案 2 :(得分:2)
对我来说,Terracotta非常适合您的要求:
此外,Terracotta会做你要求的“反思” - 尽管它不使用反射,因为它太慢了。它使用BCM。只有更改才会在网络上传播。
Hazelcast btw需要序列化,所以它会很慢并且根本不会很好地使用地图数据结构地图(每次放置将导致整个网络上的完整深度克隆副本)并且它没有任何类型的内置的持久性。
答案 3 :(得分:1)
有趣。
我认为我们都开发了一个动物园,它包含了我们习惯在项目中使用的所有抽象层。每个抽象层都是完全不同的动物。
我的目标是尽量减少动物护理和喂食所花费的时间,只要它让我解决手头的问题 - 这是开销 - 浪费的资源。因此,我们可以使用的更少,更简单的抽象层,我们的生产力越高。
我通常可以通过两个小动物--OOP和RDBMS来完成,通过漂亮,简单,最小化,手工制作的DAL进行耦合。对我来说,ORM主要是开销 - 一个抽象太多,而且非常饥饿。
不要忽视将存储过程视为抽象工具的选项。如果您对SQL非常熟悉,它可以成为实现轻量级BL外观的有用资源,这意味着无需考虑ORM问题。
这篇文章表明,无论如何,RDBMS的替代品都出现了一些要求。
答案 4 :(得分:0)
感谢您的回答。
实际上,你谈论的是DBs,这是我想要从图片中完全取出的东西。
我目标的用例是初创公司的中小型集群webapp(局域网或云端的盒子)。它需要以~RAM速度级别检索对象并相当容易地扩展。作为副作用,人们不必考虑数据库服务器安装,阻抗不匹配,JDBC,缓存,带注释的污染域模型等。
同样,我想要完成的是here所描述的内容,我希望对实际实施的想法有更多的反馈(为什么使用Terracotta而不是Hazelcast,使用序列化或通过反射深度克隆或者其他什么,以及像这样的方法的主要缺点 - 例如,为什么你不能为当前的ORM / DB设置改变它。
集成非常简单,因此它具有非常简洁的Java API,提高了代码的可读性。没有其他软件(DB,需要memcached)。
答案 5 :(得分:0)
试试GigaSpaces。我认为他们完全符合您的要求,如果我没弄错的话,那里有创业公司的免费版本。
一些概念:
检查他们的wiki,(但只有“程序员指南” - 其余的都是营销BS)。