Indexing ArangoDB唯一索引验证
快速提问:在ArangoDB中,如果我创建了一个唯一的索引(例如一个唯一的散列索引),ArangoDB是验证该属性的唯一性,还是仅仅因为我告诉它它是唯一的而假设它?我很好奇,在创建唯一索引之前,我是否应该通过验证步骤来验证数据的唯一性。正如您所知,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
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
因此,如果您在创建索引之前在应用程序设置过程中插入文档(出于性能原因,这是一种可行的方法),那么您需要在以后创建这些索引时处理可能出现的异常。谢谢!这回答了我的问题。由于在创建和索引后会提高添加数据的性能,是否有任何方法可以在插入期间暂时关闭索引,然后在最后更新索引?我想这违反了酸性物质,但我同意。我必须插入大量的边。创建关系定义本身将从索引(非常大的多对多)中受益匪浅