MongoDB不像关系数据库那样有主键(“primary key”), MongoDB中所有文档随机存储在堆(heap)内存中, “_id”和其他索引指向堆内存.TokuMX, “_id”索引是聚簇索引, 索引辅助索引(secondary indexes)存储了一份每个文档的_id的副本 以通过_id索引查找整个文档来查到索引未覆盖的查询( non-covering queries). 这样TokuMX中集合可说有主键,但是它总是_id索引。 它只是非聚簇的辅助索引来引用整个文档的聚簇索引.

TokuMX 1.4.0中引进了一个新特性使得主键可定义,但不总是_id索引{_id: 1}。这样主键将是聚簇的并唯一的,但只检测非聚簇的_id索引的唯一性, 而采用TokuMX自动产生的_id索引代价比较便宜。 这会定义默认排序(“$natural” order)的的集合,这样本质上可以只要一个聚簇索引,如果不需要_id的聚簇索引并想节省存储,就可以不需要用两个聚簇索引。 记住,每个非聚簇的辅助索引会引用主键,因此如果插入很多的字段到主键中,会导致所有辅助索引变大。另外,主键字段不能是数组或者正则表达式。

实例如下:

toku:PRIMARY> db.createCollection("foo", {primaryKey: {a: 1, b: 1, _id: 1}})
{ "ok" : 1 }
toku:PRIMARY> db.foo.getIndexes()
[
 {
  "key" : {
   "a" : 1,
   "b" : 1,
   "_id" : 1
  },
  "unique" : true,
  "ns" : "test.foo",
  "name" : "primaryKey",
  "clustering" : true
 },
 {
  "key" : {
   "_id" : 1
  },
  "unique" : true,
  "ns" : "test.foo",
  "name" : "_id_"
 }
]

参考 http://www.tokutek.com/2014/02/whats-new-in-tokumx-1-4-part-1-primary-keys/

0 回复
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。