NoSQL是大的网络规模

NoSQL炒作无处不在。许多初选择卡桑德拉/蒙哥大/HBASE/Redis/…。在这里,我将讨论为什么他们应该坚持一个SQL解决方案-MySQL或PostgreSQL。

在我桑德拉,我详述了为什么I决定不使用它。现在,我观看了十几篇演讲,后来又读了几十篇文章,我可以详细解释为什么我认为这通常不是一个好主意。

NoSQL是伟大的“网络规模”。这是NoSQL传道者的口头禅。但NoSQL解决方案的一个重要缺点是,在NoSQL(至少对Cassandra和HBASE而言)中,你问什么问题。大多数消息来源(Twitter、Facebook、Rackspace)都提到了这一点。你不能随便质疑任何你喜欢的东西。另一方面,关系模型允许您定义模型,然后询问任何出现在您脑海中的问题(查询)。我敢打赌,一家初创公司还不知道它要问它的数据存储库的所有问题。

另一件事是可用性。所有开发人员都熟悉SQL和关系模型。初创企业必须尽快进入公众市场。为什么要费心学习新的范式、新的平台和新的工具(如果你幸运地拥有了工具)?

现在让我们回到网络规模。创业公司不需要网络规模。真的。你不会一夜之间就有一百万用户。Twitter没有,Facebook没有。如果一切顺利,你可以逐步升级你的数据模型,以满足新的需求。Twitter和Facebook就是这样做的。他们从MySQL开始。哦,顺便说一下,Twitter还在用MySQL做最重要的事情--tweet。现在,如果你比他们有更多的数据,你就..。脸书?

https://movie.douban.com/doulist/145579081/

总之--不要为了一些虚构的“千兆字节”而牺牲灵活性和轻松的工作。如果发生了需要处理大量数据的情况,那么您将能够对数据模型进行重构。当你知道你想问什么问题的时候。

JPAEntityManager merge()persist()方法。在冬眠中还有更多-savepersistsaveOrUpdate更新,合并。我一直在用merge()为了简单起见,但我们必须知道这种方法的确切行为。
为了获得以下结果,我不得不阅读JPA规范(1.0,但我想它在2.0中应该保持不变):

https://movie.douban.com/doulist/145585807/

  • 如果实体已经处于持久性上下文(会话)中,则除了级联之外,不采取任何行动。
  • 如果实体被分离,则返回一个副本(对象‘),该副本被附加(托管)
  • 如果实体是临时的(新实例),则保存该实体,并返回持久(和托管)副本。
  • 如果实体被分离,但是当前实体管理器中存在具有相同标识符的对象,则将分离对象的状态复制到当前持久性实体中,并返回它(当前)。

下面是一个描述正在发生的事情的测试:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Message msg = new Message();  msg.setText("Foo");  Message msg2 = em.merge(msg);    System.out.println("New, transient object: " + msg);  System.out.println("Merged object: " + msg2);    Message msg3 = em.merge(msg2);    System.out.println("Merging persistent object: " + msg3);    Message msg4 = new Message();  msg4.setText("Bar");  msg4.setId(msg3.getId());    Message msg5 = em.merge(msg4);  System.out.println("Detached entity with same id: " + msg5);  System.out.println("Merged text: " + msg5.getText());    em.clear();    Message msg6 = em.merge(msg5);    System.out.println("Merged detached entity: " + msg6);

结果是:

https://www.itangyuan.com/book/catalogue/16337053.html

1 2 3 4 5 6 7 New, transient object: com.foo.model.Message@1f Merged object: com.foo.model.Message@8da6fe83 Merging persistent object: com.foo.model.Message@8da6fe83 Detached entity with same id: com.foo.model.Message@8da6fe83 Merged text: Bar Hibernate: select message0_.id as id1_1_, message0_.authorId ..... Merged detached entity: com.foo.model.Message@a13fade8

我在使用merge()只是,但一个人必须知道他得到了什么。

(注:Hibernate的情况也是如此merge())

更新:你可以

上一篇:高性能架构NoSQL应用场景!


下一篇:SQL、NoSQL还是NewSQL? 未来谁将一统数据库?