瀏覽代碼

agCollections.erl API重新整理 测试 改进

erlArango_v1
AICells 5 年之前
父節點
當前提交
1d4a12fef1
共有 2 個檔案被更改,包括 276 行新增174 行删除
  1. +3
    -3
      include/agHttpCli.hrl
  2. +273
    -171
      src/agApi/agCollections.erl

+ 3
- 3
include/agHttpCli.hrl 查看文件

@ -7,9 +7,9 @@
%%
-define(DEFAULT_BASE_URL, <<"http://127.0.0.1:8529">>).
-define(DEFAULT_DBNAME, <<"tttt">>).
-define(DEFAULT_USER, <<"root">>).
-define(DEFAULT_PASSWORD, <<"156736">>).
-define(DEFAULT_DBNAME, <<"newtest1">>).
-define(DEFAULT_USER, <<"testuser">>).
-define(DEFAULT_PASSWORD, <<"">>).
-define(DEFAULT_BACKLOG_SIZE, 1024).
-define(DEFAULT_CONNECT_TIMEOUT, 5000).
-define(DEFAULT_POOL_SIZE, 16).

+ 273
- 171
src/agApi/agCollections.erl 查看文件

@ -7,85 +7,114 @@
% doc_address:https://www.arangodb.com/docs/stable/http/collection.html
%
% POST /_api/collection
%
% waitForSyncReplication1
% 0
% forceReplicationFactor1
% 0
% HTTP接口
% ArangoDB集合的HTTP接口的简介
%
%
% 使访document
%
%
% 使ArangoDB 1.1访ArangoDB 1.2使访ArangoDB当前使用64位无符号整数值在内部维护集合IDID返回给客户端时ArangoDB会将它们放入字符串中ID使ArangoDB返回的集合ID视为不透明字符串
%
% ID已返回为整数ArangoDB 1.1
%
%
% _线-ArangoDB中的命名约定
%
%
% ArangoDB允许为每个集合使用密钥生成器_key属性自动生成值ArangoDB将使用传统的密钥生成器使
%
% 01
%
% 12345
%
% 使5
%
% 16111621
%
% 使
%
% HTTP方法POSTGETPUTDELETE
%
%
% ArangoDB中的所有集合都具有唯一的标识符和唯一的名称ArangoDB在内部使用集合的唯一标识符来查找集合ArangoDB管理使访使
%
% JSON对象是必需的
% name
% waitForSynctruefalse
% doCompacttrueMMFiles存储引擎有意义
% journalSize10485761 MiB
% MMFiles存储引擎有意义
% isSystemtruecollection-name 线
% API实现者来创建系统集合使false
% isVolatiletrue
% 使
% ArangoDB不会对磁盘CRC校验和
%
% falseMMFiles存储引擎有意义
% keyOptionskeyOptions JSON数组
% type uuid的和填充的
%
% inital偏移和间隔可以被配置成在填充密钥发生器以上升辞书排序顺序生成的固定长度16
% RocksDB配合使用的理想选择
% 使UUID密钥生成器生成通用唯一的128位密钥
%
%
% allowUserKeystrue_key属性中提供自己的键值 false
% _key属性中提供自己的密钥值被视为错误
% incremen
% offset
% type2type值有效
% 2
% 3
% indexBuckets使1621024
%
% 1亿64
% ArangoDB版本中使用
% MMFiles存储引擎有意
% shardKeys[ _key]
%
%
% plicationFactor1DBServer上保留多少个副本
% 1k的值表示保留k-1DBServer上
% leader follower
%
% writeConcern1DBServer上同步每个分片需要多少个副本
% writeConcern的值 ReplicationFactor
% DistributionShardsLike
% 使仿
% shardingStrategyArangoDB 3.4
% shardingStrategy 使使
%
%
% community-compat3.4ArangoDB社区版使用的默认分片
% enterprise-compat3.4ArangoDB企业版使用的默认分片
% enterprise-smart-edge-compat3.4ArangoDB Enterprise Edition中的智能边缘集合使用的默认分片
% hash3.4
% enterprise-hash-smart-edge3.4
% enterprise-hash-smart-edgeArangoDB
% smartJoinAttribute
% 使 distributedShardsLike属性设置为另一个集合的名称shardKeys属性设置为单个shard key属性
% smartJoinAttribute中存储的值都必须是字符串
%
% 400HTTP 400
% 404HTTP 404
% http://server:port/_api/collection/collection-name
% 7254820demoURL为
%
% http://localhost:8529/_api/collection/demo
%
%POST /_api/collection
%
%
% waitForSyncReplication10
% forceReplicationFactor10
%
%JSON对象是必需的
% name
% waitForSynctruefalse
% doCompacttrueMMFiles存储引擎有意义
% journalSize10485761 MiBMMFiles存储引擎有意义
% isSystemtruecollection-name 线API实现者来创建系统集合使false
% isVolatiletrue使ArangoDB不会对磁盘CRC校验和falseMMFiles存储引擎有意义
% schemarulelevel并且message必须遵循文档架构验证中记录的规则
% keyOptionskeyOptions JSON数组或者JSON对象
% type uuid的和填充的
% 16RocksDB配合使用的理想选择 使UUID密钥生成器生成通用唯一的128位密钥
% allowUserKeystrue_key属性中提供自己的键值 false_key属性中提供自己的密钥值被视为错误
%
% offset
% type2type值有效
% 2
% 3
% numberOfShards1
% shardKeys[ _key]
% plicationFactor1DB-Server上保留多少个副本1k的值表示保留k-1"satellite"SatelliteCollection DB-Servers的数量匹配
% DB服务器上 leader follower
%
% writeConcern1DB服务器上同步每个分片需要多少个副本writeConcern的值 ReplicationFactor
% DistributionShardsLike 使仿
% shardingStrategyArangoDB 3.4shardingStrategy 使使
%
% community-compat3.4ArangoDB社区版使用的默认分片
% enterprise-compat3.4ArangoDB企业版使用的默认分片
% enterprise-smart-edge-compat3.4ArangoDB Enterprise Edition中的智能边缘集合使用的默认分片
% hash3.4
% enterprise-hash-smart-edge3.4
% enterprise-hash-smart-edgeArangoDB
% smartJoinAttributeSmartJoin集合的分片键值
% 使 distributedShardsLike属性设置为另一个集合的名称shardKeys属性设置为单个shard key属性smartJoinAttribute中存储的值都必须是字符串
%
% 400HTTP 400
% 404HTTP 404
% HTTP 200
newColl(PoolNameOrSocket, MapData) ->
BodyStr = jiffy:encode(MapData),
agHttpCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/collection">>, [], BodyStr).
newColl(PoolNameOrSocket, MapData, WaitForSyncReplication, ForceReplicationFactor) ->
newColl(PoolNameOrSocket, MapData, QueryPars) ->
QueryBinary = agMiscUtils:spellQueryPars(QueryPars),
Path = <<"/_api/collection", QueryBinary/binary>>,
BodyStr = jiffy:encode(MapData),
Path = <<"/_api/collection?waitForSyncReplication=", (agMiscUtils:toBinary(WaitForSyncReplication))/binary, "&forceReplicationFactor=", (agMiscUtils:toBinary(ForceReplicationFactor))/binary>>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPost, Path, [], BodyStr).
%
%
% DELETE /_api/collection/{collection-name}
% 3.4.0使ID访问集合
%
% collection-name
%
% isSystemtrue才能删除系统集合
% collection-name标识的集合
%
%
% id
%
% 400HTTP 400
% 404HTTP 404
delColl(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary>>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgDelete, Path, [], undefined).
@ -100,60 +129,86 @@ delColl(PoolNameOrSocket, CollName, IsSystem) ->
agHttpCli:callAgency(PoolNameOrSocket, ?AgDelete, Path, [], undefined)
end.
%
%
% PUT /_api/collection/{collection-name}/truncate
% 3.4.0使ID访问集合
%
% collection-name
%
%
% 400HTTP 400
% 404 HTTP 404
clearColl(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/truncate">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined).
%
% GET /_api/collection/{collection-name}
% 3.4.0使ID访问集合
%
% collection-name
%
% id
% name
% status
% 1
% 2
% 3
% 4
% 5
% 6
%
% 1
% 2
% 3
% 4
% 5
% 6
%
% type
% 2
% 3
% 2
% 3
% isSystemtrue
%
%
% 404HTTP 404
% 404HTTP 404
collInfo(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary>>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
%
% GET /_api/collection/{collection-name}/properties
% 3.4.0使ID访问集合
%
% collection-name
% 400HTTP 400
% 404 HTTP 404
% HTTP 200
collProperties(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", (CollName)/binary, "/properties">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
%
%
%
%
% GET /_api/collection/{collection-name}/count
% 3.4.0使ID访问集合
%
% collection-name
%
% count
%
% 400HTTP 400
% 404 HTTP 404
collCount(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/count">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
%
% GET /_api/collection/{collection-name}/figures
%
%
%
% JSON文件的文件大小fileSize值以字节为单位报告
% 使
% fileSize结果中报告
% 100使使fileSize值的总和
% fileSize值的总和用作磁盘使用率的下限近似值
% 3.4.0使ID访问集合
%
% collection-name
%
% HTTP 200
% count
% figures
% indexes
% count
% size
% 400HTTP 400
% 404 HTTP 404
collFigures(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/figures">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
@ -165,23 +220,34 @@ collFigures(PoolNameOrSocket, CollName) ->
% json
% JSON对象
% ID
% JSON文档
% JSON文档
% shardId属性的JSON对象ID
%
%
% 200ID
% 400HTTP 400 HTTP 400
% 404 HTTP 404
% 501HTTP 501
% eg: MapData = #{'_key' => testkey, value => 23}
collResponsibleShard(PoolNameOrSocket, CollName, MapData) ->
Path = <<"/_api/collection/", CollName/binary, "/responsibleShard">>,
BodyStr = jiffy:encode(MapData),
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], BodyStr).
% ID
% GET /_api/collection/{collection-name}/shards
%
% collection-name
%
% true
% ID的JSON数组
% details参数设置为trueID作为对象属性键的JSON对象
%
% GET /_api/collection/{collection-name}/shards
% Query Parameters
% details (optional)true
%
% 200
% 400HTTP 400
% 404 HTTP 404
% 501HTTP 501
collShards(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/shards">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
@ -197,47 +263,57 @@ collShards(PoolNameOrSocket, CollName, IsDetails) ->
end.
% ID
% IDID是服务器生成的字符串使
% ID作为字符串
% GET /_api/collection/{collection-name}/revision
collRevision(PoolNameOrSocket, CollName) ->
% 3.4.0使ID访问集合
%
% collection-name
% IDID是服务器生成的字符串使
% revisionID的字符串形式
%
% 400HTTP 400
% 404 HTTP 404
collRev(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/revision">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
%
%
%
% GET /_api/collection/{collection-name}/checksum
% 3.4.0使ID访问集合
%
% collection-name
%
% withRevisionsID
% withData
% withRevisions ID
% withData
% ID
% ArangoDB实例上的两个集合是否包含相同的内容
% _key系统属性来计算_from和_to也将包含在计算中
% withRevisions设置为trueID_rev系统属性
% withRevisions设置为trueID_rev系统属性
% withData提供值为true的值 使
% JSON对象
% checksum
% ID作为字符串
% ID的字符串形式
%
% GET /_api/collection/{collection-name}/checksum
%
% 400HTTP 400
% 404 HTTP 404
collChecksum(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/checksum">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
collChecksum(PoolNameOrSocket, CollName, QueryPars) ->
QueryBinary = agMiscUtils:spellQueryPars(QueryPars),
Path = <<"/_api/collection/", CollName/binary, "/checksum", QueryBinary/binary>>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined).
collChecksum(PoolNameOrSocket, CollName, IsWithRevisions, IsWithData) ->
case IsWithRevisions orelse IsWithData of
false ->
Path = <<"/_api/collection/", CollName/binary, "/checksum">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined);
_ ->
Path = <<"/_api/collection/", CollName/binary, "/checksum?withRevisions=", (agMiscUtils:toBinary(IsWithRevisions, utf8))/binary, "&withData=", (erlang:atom_to_binary(IsWithRevisions, utf8))/binary>>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined)
end.
%
%
% excludeSystem
%
% GET /_api/collection
% 3.4.0使ID访问集合
%
% excludeSystem
% 使使
% excludeSystem提供值为true的值
%
% 200
collList(PoolNameOrSocket) ->
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/collection">>, [], undefined).
@ -246,84 +322,103 @@ collList(PoolNameOrSocket, IsExcludeSystem) ->
false ->
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/collection">>, [], undefined);
_ ->
Path = <<"/_api/collection/?excludeSystem=true">>,
Path = <<"/_api/collection?excludeSystem=true">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], undefined)
end.
%
%
% countcount设置为 false可以加快加载集合的速度 true
% PUT /_api/collection/{collection-name}/load
% 3.4.0使ID访问集合
%
% collection-name
%
%
% countcount设置为 false可以加快加载集合的速度
%
% id
% name
% countcount输入参数设置为true或未指定时才返回
% status
% type
% 2
% 3
% isSystemtrue
%
% 400HTTP 400
% 404 HTTP 404
loadColl(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/load">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined).
loadColl(PoolNameOrSocket, CollName, IsCount) ->
case IsCount of
false ->
Path = <<"/_api/collection/", CollName/binary, "/load">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], <<"{\"count\":false}">>);
_ ->
Path = <<"/_api/collection/", CollName/binary, "/load">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined)
end.
loadColl(PoolNameOrSocket, CollName, MapData) ->
BodyStr = jiffy:encode(MapData),
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/collection/", CollName/binary, "/load">>, [], BodyStr).
%
% PUT /_api/collection/{collection-name}/unload
% 3.4.0使ID访问集合
%
% collection-name使
% id
% name
% status
% type
% 2
% 3
% isSystemtrue
% id
% name
% status
% type
% 2
% 3
% isSystemtrue
%
% 400HTTP 400
% 404HTTP 404
unloadColl(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/unload">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined).
%
% PUT /_api/collection/{collection-name}/loadIndexesIntoMemory
% 3.4.0使ID访问集合
%
% collection-namecollection的所有索引条目缓存到主内存中
%
%
%
% RocksDB存储引擎上有用MMFiles引擎中
% RocksDB上
%
%
% collection-namecollection的所有索引条目缓存到主内存中
% RocksDB存储引擎上有用MMFiles引擎中
% RocksDB上
% result设置为的对象true
%
% 200
% 400HTTP 400
% 404HTTP 404
collLoadIndexesIntoMemory(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/loadIndexesIntoMemory">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined).
%
% PUT /_api/collection/{collection-name}/properties
% 3.4.0使ID访问集合
%
% collection-name
%
% waitForSynctrue
% journalSize10485761 MBjournalSize值时
% waitForSynctrue
% journalSize10485761 MBjournalSize值时
% schemarulelevel并且message必须遵循文档架构验证中记录的规则
%
%
% id
% name
% waitForSync
% journalSize
% status
% type
% 2
% 3
% isSystemtrue
% isVolatiletrueArangoDB不会将数据写入或同步到磁盘
% doCompact
% keyOptionsJSON对象
% typeuuid的
% allowUserKeystrue_key属性中提供自己的键值 false_key属性中提供自己的密钥值被视为错误
% waitForSyncjournalSize和name之外使
% id
% name
% waitForSync
% journalSize
% status
% type
% 2
% 3
% isSystemtrue
% isVolatiletrueArangoDB不会将数据写入或同步到磁盘
% doCompact
% keyOptionsJSON对象
% typeuuid的
% allowUserKeystrue_key属性中提供自己的键值 false_key属性中提供自己的密钥值被视为错误
% schemanullrulelevel并且message必须遵循文档架构验证中记录的规则
% waitForSyncjournalSize和name之外使
%
% 400HTTP 400
% 404 HTTP 404
collChangeProperties(PoolNameOrSocket, CollName, MapData) ->
Path = <<"/_api/collection/", CollName/binary, "/properties">>,
BodyStr = jiffy:encode(MapData),
@ -331,10 +426,11 @@ collChangeProperties(PoolNameOrSocket, CollName, MapData) ->
%
% PUT /_api/collection/{collection-name}/rename
% 3.4.0使ID访问集合
%
% collection-name
%
% name
% name
%
% id
% name
@ -345,6 +441,9 @@ collChangeProperties(PoolNameOrSocket, CollName, MapData) ->
% isSystemtrue
% _graphs在当前数据库中该集合内的所有图形定义中重命名
%
%
% 400HTTP 400
% 404 HTTP 404
renameColl(PoolNameOrSocket, OldName, NewName) ->
Path = <<"/_api/collection/", OldName/binary, "/rename">>,
NameStr = jiffy:encode(NewName),
@ -362,11 +461,11 @@ renameColl(PoolNameOrSocket, OldName, NewName) ->
%
% 400HTTP 400
% 404HTTP 404
% 3.7
collRotate(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/rotate">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined).
%
% PUT /_api/collection/{collection-name}/recalculateCount
%
@ -375,6 +474,9 @@ collRotate(PoolNameOrSocket, CollName) ->
%
% true
% RocksDB存储引擎
collRecalculateCount(PoolNameOrSocket, CollName) ->
%
% 200HTTP 200
% 404HTTP 404
collRecount(PoolNameOrSocket, CollName) ->
Path = <<"/_api/collection/", CollName/binary, "/recalculateCount">>,
agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined).

Loading…
取消
儲存