赞
踩
最近在做arango数据库的压测,因为是个测试小白白,在开始测试之前因为没了解过arangodb,所以前期疯狂的找各种资料,然后各种尝试。(在查资料的过程中网上关于arangodb测试的资料非常少,后续我会持续分享我找到的arangodb的相关资料)目前本人的编程能力还是处于初学阶段(东学一下,西学一下),和大家一起进步
开始前的絮絮叨叨:觉得对于大脑来说,光有输入没有输出的话也是不行的,这也是我下定决心开始写文章的原因,对于写文章我也纠结了好久,不知道要写什么,最后还是决定拿最近的工作开始入手,把自己在找资料,学习的一些心得一并写出来,正好对最近工作来一个总结。
絮絮叨叨的纪念一下第一篇文章。\(^o^)/~
pip install pyarango
from pyArango.connection import *
conn_URL = 'http://localhost:8529' #安装arangodb完成后,在浏览器输入localhost:8529就可以进入到arangodb的前端页面,arangodb一般的默认端口都是8529
username = 'root'
passwd = ''
conn = Connection(arangoURL=conn_URL, username=username, password=passwd)
print('conn: %s' % conn) #感兴趣的小伙伴可以查看一下这个连接显示的到底是个啥
database_name = 'my_db'
#判断是否有该数据库,如果没有就创建该数据库,如果有就直接连接
if not conn.hasDatabase(database_name):
conn.createDatabase(name=database_name)
db = conn[database_name]
print('db: %s' % db)
我理解的arangodb数据库的collection就是表,分为点表(document)和边表(edge),但本次教程中默认创建的是document。
collection_name = 'users'
if not db.hasCollection(collection_name):
db.createCollection(name=collection_name)
collection = db[collection_name]
print('collection: %s' % collection)
插入数据有两种方法:
一种是用.save()
方法添加,
另一种使用aql
语句进行添加
.save()
方法插入文档数据:
利用for循环批量插入
print('插入之前的数据量: %s' % collection.count())
for i in range(0,10):
user = {
'name' : 'user_' + str(i),
'age' : 20 + i,
'address' : {
'home' : 'home address',
'office' : 'office address'
}
}
collection.createDocument(user).save()
print('插入之后的数据量: %s' % collection.count())
aql
语句插入数据
rowlist = {
'name': 'user_',
'age' : 20,
'address': {
'home': 'home address',
'office' : 'office address'
}
}
bind = {"rowlist": rowlist, "@collection":collection_name}
aql = 'INSERT @rowlist into @@collection'
result = db.AQLQuery(aql, bindVars=bind)
bindVars
表示的是绑定参数。
绑定参数的语法是
@+参数名称
存在一种特殊类型的绑定参数用于注入集合名称。这种类型的绑定参数有一个以附加@符号为前缀的名称(因此在查询中使用绑定参数时,必须使用两个@符号)。
“@collection”:collection_name
表示的是插入到变量collection_name
中存入的集合
笔者目前还没有找到像.save()
方法批量插入不重复的方法,对aql也没那么精通,如果哪位大佬有方法欢迎留言告诉我,大家一起学习。
query = collection.fetchAll(skip=5, limit=2)
for doc in query:
print(doc)
query = collection.fetchByExample({'name':'user_5'}, batchSize=10, count=True)
for doc in query:
print(doc)
print('query by AQL ... 使用aql查询文档')
aql = "FOR user IN users FILTER user.name == @name || user.age < 25 LIMIT 5 RETURN user"
bindVars = {'name' : 'user_0'}
query = db.AQLQuery(aql, rawResults=True ,batchSize=1, bindVars=bindVars)
doc = []
for i in query:
doc.append(i)
print(i)
print('total ' + str(len(doc)) + ' elements')
查询后会显示结果,因为之前测试的时候需要看查询结果有多少条,找了关于db.AQLQuery
的资料,但是没有找到,我就想了一个方法,把结果方法doc的列表中,然后统计列表中的元素个数,就是我想要的查询的结果数。目前看还是可以的,如果有更好的方法欢迎告诉我哈。
删除文档有两种方法,这里只是删除文档,没有把集合删除,相当于清空集合。
一种是用.delete
方法删除
另一种是通过aql
删除文档
.delete
方法
#为了增加可读性,在删除前后都添加打印document条数
print('collection count before delete: %s' % collection.count())
query = collection.fetchAll()
for doc in query:
doc.delete()
print('collection count after delete: %s' % collection.count())
这个是逐条删除document,所以时间可能会有点长,但也没有长到无法接收的地步,删除的时间还是和数据量有关。
aql
方法
bind = {"@collection": collection_name}
aql = 'for i in @@collection remove i in @@collection'
result = db.AQLQuery(aql, bindVars=bind)
collection.delete()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。