Coin163

mongodb经验原则(二)

2015-11-25by coin, 次阅读
  1、mongodb主键:使用业务中的唯一ID
      _id字段在不指定时是自动生成的,也就是说,我们也可以在insert操作时自己指定它的值。如果你的业务中对每一条数据都有一个唯一ID,那么建议使用这个ID的值作为_id的值。比如存用户信息的collection,那么你可以使用用户的uid作_id的值,这样做有两个好处:
    1)减少原有_id对空间的占用
    2)让你的_id值意义更明确
    Id定义方式参考:
    
@Id
private ObjectId id;
public String getId() {
    return id.toString();
}
public void setId(String id) {
    this.id = new ObjectId(id);
}
或
@Id
private String id = new ObjectId().toString();

  2、使用“引用”还是“嵌入”?
   有三个主要因素需要考虑:
   1)你是否为了很少才会发生一次的数据变化而在每次读取上花费代价。
      你也许会去读取一个产品一万次为了它的每一次变化。你是否会愿意每次为了”使一次写入更快或是保证一致性而去做10000次读取”缴纳罚金。大多数的应用程序read-heavy比write-heavy要重要一些:做出你的权衡吧。
   2)一致性对你的应用来讲有多重要?
      如果你的应用中一致性很重要,你应该采用"引用"模式,例如,我们需要多个文档原子性的看到一次数据变化。 如果我们做的是一个只能在某些时间段内交易某种"有价证券"的交易系统,当"有价证券"不可交易时,我们应该立即对它    们加"锁"。我们可以将一个加锁的单个文档引用到一组与之相关的[有价证券]文档中。这样做要比在应用程序层面上去加    锁要好一点。但是无论如何,应用程序需要知道何时去加锁以及何时去解锁。
   3)是否需要快速读取?
      如果读取需要尽可能的快,那么应该采用"嵌入"。在实时(Real-time)系统中应该尽可能的使用"嵌入"。

------分隔线----------------------------