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())

更新:你可以

posted @ 2021-10-05 13:13  javd9w  阅读(42)  评论(0)    收藏  举报