Indexing ArangoDB唯一索引验证

Indexing ArangoDB唯一索引验证,indexing,arangodb,aql,Indexing,Arangodb,Aql,快速提问:在ArangoDB中,如果我创建了一个唯一的索引(例如一个唯一的散列索引),ArangoDB是验证该属性的唯一性,还是仅仅因为我告诉它它是唯一的而假设它?我很好奇,在创建唯一索引之前,我是否应该通过验证步骤来验证数据的唯一性。正如您所知,ArangoDB在您可以使用索引之前先建立索引。 如果无法确保唯一性,将抛出异常: 127.0.0.1:8529@_system> c = db._create("c") [ArangoCollection 169, "c" (type docu

快速提问:在ArangoDB中,如果我创建了一个唯一的索引(例如一个唯一的散列索引),ArangoDB是验证该属性的唯一性,还是仅仅因为我告诉它它是唯一的而假设它?我很好奇,在创建唯一索引之前,我是否应该通过验证步骤来验证数据的唯一性。

正如您所知,ArangoDB在您可以使用索引之前先建立索引。 如果无法确保唯一性,将抛出异常:

127.0.0.1:8529@_system> c = db._create("c")
[ArangoCollection 169, "c" (type document, status loaded)]
127.0.0.1:8529@_system> c.insert({"abc":1})
{ 
  "_id" : "c/172", 
  "_key" : "172", 
  "_rev" : "_T1m73_m---" 
}
127.0.0.1:8529@_system> c.insert({"abc":1})
{ 
  "_id" : "c/176", 
  "_key" : "176", 
  "_rev" : "_T1m748K---" 
}
127.0.0.1:8529@_system> c.ensureIndex(
...> {"type":"hash","unique":true,"fields":["abc"]})
JavaScript exception in file '.../arangosh.js' at 97,7:
 ArangoError 1210: unique constraint violated
!      throw error;
!      ^
stacktrace: ArangoError: unique constraint violated
    at Object.exports.checkRequestResult (.../arangosh.js:95:21)
    at ArangoCollection.ensureIndex (.../arango-collection.js:733:12)
    at <shell command>:1:3

127.0.0.1:8529@_system> c.ensureIndex(
...> {"type":"skiplist","unique":true,"fields":["abc"]})
JavaScript exception in file '.../arangosh.js' at 97,7:
ArangoError 1210: unique constraint violated
!      throw error;
!      ^
stacktrace: ArangoError: unique constraint violated
    at Object.exports.checkRequestResult (.../arangosh.js:95:21)
    at ArangoCollection.ensureIndex (.../arango-collection.js:733:12)
    at <shell command>:1:3
127.0.0.1:8529@_system>c=db._创建(“c”)
[ArangoCollection 169,“c”(类型文档,状态已加载)]
127.0.0.1:8529@_system>c.插入({“abc”:1})
{ 
“_id”:“c/172”,
“_键”:“172”,
“修订版”:“T1m73\m--”
}
127.0.0.1:8529@_system>c.插入({“abc”:1})
{ 
“_id”:“c/176”,
“_键”:“176”,
“修订版”:“T1m748K--”
}
127.0.0.1:8529@_system>c.ensureIndex(
…>{“type”:“hash”,“unique”:true,“fields”:[“abc”]})
97,7处文件“…/arangosh.js”中的JavaScript异常:
ArangoError 1210:违反了唯一约束
!      投掷误差;
!      ^
stacktrace:ArangoError:违反了唯一约束
在Object.exports.checkRequestResult(…/arangosh.js:95:21)
在ArangoCollection.ensureIndex(…/arango collection.js:733:12)
时间:1:3
127.0.0.1:8529@_system>c.ensureIndex(
…>{“type”:“skiplist”,“unique”:true,“fields”:[“abc”]})
97,7处文件“…/arangosh.js”中的JavaScript异常:
ArangoError 1210:违反了唯一约束
!      投掷误差;
!      ^
stacktrace:ArangoError:违反了唯一约束
在Object.exports.checkRequestResult(…/arangosh.js:95:21)
在ArangoCollection.ensureIndex(…/arango collection.js:733:12)
时间:1:3
与尝试插入违反唯一约束的文档时的操作类似:

127.0.0.1:8529@_system> db._drop("c")
127.0.0.1:8529@_system> c = db._create("c")
[ArangoCollection 315, "c" (type document, status loaded)]

127.0.0.1:8529@_system> c.ensureIndex({
...>"type":"skiplist","unique":true,"fields":["abc"]})
{ 
  "id" : "c/318", 
  "type" : "skiplist", 
  "fields" : [ 
    "abc" 
  ], 
  "unique" : true, 
  "sparse" : false, 
  "isNewlyCreated" : true, 
  "code" : 201 
}

127.0.0.1:8529@_system> c.insert({"abc":1})
{ 
  "_id" : "c/330", 
  "_key" : "330", 
  "_rev" : "_T1n-B2S---" 
}

127.0.0.1:8529@_system> c.insert({"abc":1})
JavaScript exception in file '.../arangosh.js' at 97,7:
 ArangoError 1210: cannot create document, unique constraint violated
!      throw error;
!      ^
stacktrace: ArangoError: cannot create document, unique constraint violated
 at Object.exports.checkRequestResult (.../arangosh.js:95:21)
 at ArangoCollection.save.ArangoCollection.insert 
   (.../arango-collection.js:978:14)
 at <shell command>:1:3
127.0.0.1:8529@_system>db._下降(“c”)
127.0.0.1:8529@_system>c=db._创建(“c”)
[ArangoCollection 315,“c”(类型文档,状态已加载)]
127.0.0.1:8529@_system>c.ensureIndex({
…>“类型”:“skiplist”,“unique”:true,“字段”:[“abc”]})
{ 
“id”:“c/318”,
“类型”:“skiplist”,
“字段”:[
“abc”
], 
“独一无二”:没错,
“稀疏”:错误,
“isNewlyCreated”:正确,
“代码”:201
}
127.0.0.1:8529@_system>c.插入({“abc”:1})
{ 
“_id”:“c/330”,
“_键”:“330”,
“修订版”:“T1n-B2S--”
}
127.0.0.1:8529@_system>c.插入({“abc”:1})
97,7处文件“…/arangosh.js”中的JavaScript异常:
ArangoError 1210:无法创建文档,违反了唯一约束
!      投掷误差;
!      ^
stacktrace:ArangoError:无法创建文档,违反了唯一约束
在Object.exports.checkRequestResult(…/arangosh.js:95:21)
在ArangoCollection.save.ArangoCollection.insert
(…/arango collection.js:978:14)
时间:1:3

因此,如果您在创建索引之前在应用程序设置过程中插入文档(出于性能原因,这是一种可行的方法),那么您需要在以后创建这些索引时处理可能出现的异常情况。

正如您所知,ArangoDB在使用索引之前先建立索引。 如果无法确保唯一性,将抛出异常:

127.0.0.1:8529@_system> c = db._create("c")
[ArangoCollection 169, "c" (type document, status loaded)]
127.0.0.1:8529@_system> c.insert({"abc":1})
{ 
  "_id" : "c/172", 
  "_key" : "172", 
  "_rev" : "_T1m73_m---" 
}
127.0.0.1:8529@_system> c.insert({"abc":1})
{ 
  "_id" : "c/176", 
  "_key" : "176", 
  "_rev" : "_T1m748K---" 
}
127.0.0.1:8529@_system> c.ensureIndex(
...> {"type":"hash","unique":true,"fields":["abc"]})
JavaScript exception in file '.../arangosh.js' at 97,7:
 ArangoError 1210: unique constraint violated
!      throw error;
!      ^
stacktrace: ArangoError: unique constraint violated
    at Object.exports.checkRequestResult (.../arangosh.js:95:21)
    at ArangoCollection.ensureIndex (.../arango-collection.js:733:12)
    at <shell command>:1:3

127.0.0.1:8529@_system> c.ensureIndex(
...> {"type":"skiplist","unique":true,"fields":["abc"]})
JavaScript exception in file '.../arangosh.js' at 97,7:
ArangoError 1210: unique constraint violated
!      throw error;
!      ^
stacktrace: ArangoError: unique constraint violated
    at Object.exports.checkRequestResult (.../arangosh.js:95:21)
    at ArangoCollection.ensureIndex (.../arango-collection.js:733:12)
    at <shell command>:1:3
127.0.0.1:8529@_system>c=db._创建(“c”)
[ArangoCollection 169,“c”(类型文档,状态已加载)]
127.0.0.1:8529@_system>c.插入({“abc”:1})
{ 
“_id”:“c/172”,
“_键”:“172”,
“修订版”:“T1m73\m--”
}
127.0.0.1:8529@_system>c.插入({“abc”:1})
{ 
“_id”:“c/176”,
“_键”:“176”,
“修订版”:“T1m748K--”
}
127.0.0.1:8529@_system>c.ensureIndex(
…>{“type”:“hash”,“unique”:true,“fields”:[“abc”]})
97,7处文件“…/arangosh.js”中的JavaScript异常:
ArangoError 1210:违反了唯一约束
!      投掷误差;
!      ^
stacktrace:ArangoError:违反了唯一约束
在Object.exports.checkRequestResult(…/arangosh.js:95:21)
在ArangoCollection.ensureIndex(…/arango collection.js:733:12)
时间:1:3
127.0.0.1:8529@_system>c.ensureIndex(
…>{“type”:“skiplist”,“unique”:true,“fields”:[“abc”]})
97,7处文件“…/arangosh.js”中的JavaScript异常:
ArangoError 1210:违反了唯一约束
!      投掷误差;
!      ^
stacktrace:ArangoError:违反了唯一约束
在Object.exports.checkRequestResult(…/arangosh.js:95:21)
在ArangoCollection.ensureIndex(…/arango collection.js:733:12)
时间:1:3
与尝试插入违反唯一约束的文档时的操作类似:

127.0.0.1:8529@_system> db._drop("c")
127.0.0.1:8529@_system> c = db._create("c")
[ArangoCollection 315, "c" (type document, status loaded)]

127.0.0.1:8529@_system> c.ensureIndex({
...>"type":"skiplist","unique":true,"fields":["abc"]})
{ 
  "id" : "c/318", 
  "type" : "skiplist", 
  "fields" : [ 
    "abc" 
  ], 
  "unique" : true, 
  "sparse" : false, 
  "isNewlyCreated" : true, 
  "code" : 201 
}

127.0.0.1:8529@_system> c.insert({"abc":1})
{ 
  "_id" : "c/330", 
  "_key" : "330", 
  "_rev" : "_T1n-B2S---" 
}

127.0.0.1:8529@_system> c.insert({"abc":1})
JavaScript exception in file '.../arangosh.js' at 97,7:
 ArangoError 1210: cannot create document, unique constraint violated
!      throw error;
!      ^
stacktrace: ArangoError: cannot create document, unique constraint violated
 at Object.exports.checkRequestResult (.../arangosh.js:95:21)
 at ArangoCollection.save.ArangoCollection.insert 
   (.../arango-collection.js:978:14)
 at <shell command>:1:3
127.0.0.1:8529@_system>db._下降(“c”)
127.0.0.1:8529@_system>c=db._创建(“c”)
[ArangoCollection 315,“c”(类型文档,状态已加载)]
127.0.0.1:8529@_system>c.ensureIndex({
…>“类型”:“skiplist”,“unique”:true,“字段”:[“abc”]})
{ 
“id”:“c/318”,
“类型”:“skiplist”,
“字段”:[
“abc”
], 
“独一无二”:没错,
“稀疏”:错误,
“isNewlyCreated”:正确,
“代码”:201
}
127.0.0.1:8529@_system>c.插入({“abc”:1})
{ 
“_id”:“c/330”,
“_键”:“330”,
“修订版”:“T1n-B2S--”
}
127.0.0.1:8529@_system>c.插入({“abc”:1})
97,7处文件“…/arangosh.js”中的JavaScript异常:
ArangoError 1210:无法创建文档,违反了唯一约束
!      投掷误差;
!      ^
stacktrace:ArangoError:无法创建文档,违反了唯一约束
在Object.exports.checkRequestResult(…/arangosh.js:95:21)
在ArangoCollection.save.ArangoCollection.insert
(…/arango collection.js:978:14)
时间:1:3

因此,如果您在创建索引之前在应用程序设置过程中插入文档(出于性能原因,这是一种可行的方法),那么您需要在以后创建这些索引时处理可能出现的异常。

谢谢!这回答了我的问题。由于在创建和索引后会提高添加数据的性能,是否有任何方法可以在插入期间暂时关闭索引,然后在最后更新索引?我想这违反了酸性物质,但我同意。我必须插入大量的边。创建关系定义本身将从索引(非常大的多对多)中受益匪浅