几天以来,我们的 ArangoDB 安装遇到了问题。启动后几分钟/最多一个小时,所有与数据库的连接都会被拒绝。arango 日志文件显示“打开的文件太多”。“lsof | grep arango | wc -l”显示数据库有大约 50,000 个打开的文件句柄,这比最大值低很多。Linux系统允许(大约3m)。有谁知道这个错误来自哪里?
我们使用的是带有 3.13 内核的 Ubuntu Linux。30 GB RAM 和三个核心。该数据库仍然很小,大约有 150 万个条目,大小为 50GB。
谢谢,塞卡纳
编辑:“netstat -anpt | fgrep 2480”显示:
root@syssec-graphdb-001-test:~# netstat -anpt | fgrep 2480
tcp 0 0 10.215.17.193:2480 0.0.0.0:* LISTEN 7741/arangod
tcp 0 0 10.215.17.193:2480 10.215.50.30:53453 ESTABLISHED 7741/arangod
tcp 0 0 10.215.17.193:2480 10.215.50.31:49299 ESTABLISHED 7741/arangod
tcp 0 0 10.215.17.193:2480 10.215.50.30:53155 ESTABLISHED 7741/arangod
Run Code Online (Sandbox Code Playgroud)
“ulimit -n”的结果为 1024,所以我认为 ~50,000 都是 arango 进程在一起。
数据库死亡前日志文件中的最后几行:
2015-05-26T12:20:43Z [9672] ERROR cannot open datafile '/data/arangodb/databases/database-235999516/collection-28464454696/datafile-18806474509149.db': 'Too many …Run Code Online (Sandbox Code Playgroud) 我找到了一些关于在关系数据库和文档数据库中设置标记系统的建议,但对于图形/多模型数据库没有任何建议。
我正在尝试为 ArangoDB 中的文档(我们称它们为“文章”)设置一个标记系统。我可以想到两种在 Arango 等多模型(图形+文档)数据库中存储标签的明显方法:
这些实际上是实现此目的的两种主要方法吗?两者都不理想。例如:
这让我提出了一个明确的问题:关于后一个选项,是否有任何简单的方法可以自动使连接的“标签”文档显示在文章文档中?例如,有一个数组属性以某种方式“镜像”tag.name了连接的标签文档的属性?
也欢迎一般性建议。
我目前正在研究 ArangoDB POC。我发现使用 PyArango 在 ArangoDB 中创建文档所花费的时间非常长。插入 300 个文档大约需要 5 分钟。我已经粘贴了下面的粗略代码,请让我知道是否有更好的方法来加快速度:
with open('abc.csv') as fp:
for line in fp:
dataList = line.split(",")
aaa = dbObj['aaa'].createDocument()
bbb = dbObj['bbb'].createDocument()
ccc = dbObj['ccc'].createEdge()
bbb['bbb'] = dataList[1]
aaa['aaa'] = dataList[0]
aaa._key = dataList[0]
aaa.save()
bbb.save()
ccc.links(aaa,bbb)
ccc['related_to'] = "gfdgf"
ccc['weight'] = 0
ccc.save()
Run Code Online (Sandbox Code Playgroud)
不同的集合由以下代码创建:
dbObj.createCollection(className='aaa', waitForSync=False)
Run Code Online (Sandbox Code Playgroud) 假设Col1我的数据库中已经存在一个集合。所以,做类似的事情:
var col = db.collection('Col1');
col.save({"name":"something"});
Run Code Online (Sandbox Code Playgroud)
会工作得很好。
Col2但是,如果我的数据库中尚不存在的集合尝试使用相同的东西,即
var col = db.collection('Col2');
col.save({"name":"something"})
Run Code Online (Sandbox Code Playgroud)
也会工作得很好。只是它不存在并且不会显示在我的数据库中。如果它抛出一些错误或我可以使用的内容try和catch结果语句。但既然这是不可能的,我怎么知道集合是否已经存在?
我想从 ArangoDB 的文档中删除一个属性。
我认为正确的方法是使用函数UNSET(doc, attributeName1, ..., attributeNameN)。然而,仅凭这一点,数据库中没有任何变化。
例子:
let target_key = "42"
FOR doc IN myCollection
FILTER doc._key == target_key
RETURN UNSET(doc, "myAttribute")
Run Code Online (Sandbox Code Playgroud)
该示例返回没有属性的原始文档myAttribute,但新版本未保存到数据库中,因此这似乎只是一个投影副本。
我使用python-arango作为 ArangoDB 的驱动程序,似乎没有UPSERT接口。
我打算用 python-arango标记它,但我没有足够的代表来创建新标签。
我正在使用如下所示的功能进行管理,但我想知道是否有更好的方法来做到这一点?
def upsert_document(collection, document, get_existing=False):
"""Upserts given document to a collection. Assumes the _key field is already set in the document dictionary."""
try:
# Add insert_time to document
document.update(insert_time=datetime.now().timestamp())
id_rev_key = collection.insert(document)
return document if get_existing else id_rev_key
except db_exception.DocumentInsertError as e:
if e.error_code == 1210:
# Key already exists in collection
id_rev_key = collection.update(document)
return collection.get(document.get('_key')) if get_existing else id_rev_key
logging.error('Could not save document {}/{}'.format(collection.name, document.get('_key'))) …Run Code Online (Sandbox Code Playgroud) 我希望快速收集从使用 python-arangodb 驱动程序的应用程序发送到 ArangoDB 服务器的所有查询,而无需深入挖掘源代码,也无需嗅探 REST API 的 HTTP 流量。
ArangoDB Web UI 上是否没有一些管理/审核日志,可以显示哪些查询已发送到服务器?
这里使用3.2.5。
我正在使用 ArangoDB 社区版,我可以查询创建的图表AQL并获取 JSON 格式的结果,该结果在 ArangoDB Web 界面工具上以图形方式可视化。
AQL询问FOR v,e,p IN 1..3 OUTBOUND 'germanCity/Hamburg' GRAPH 'routeplanner'
OPTIONS{bfs :true}
RETURN p
Run Code Online (Sandbox Code Playgroud)
[
{
"edges": [
{
"_key": "6392826",
"_id": "germanHighway/6392826",
"_from": "germanCity/Hamburg",
"_to": "germanCity/Cologne",
"_rev": "_WmZ77pW--D",
"distance": 500
}
],
"vertices": [
{
"_key": "Hamburg",
"_id": "germanCity/Hamburg",
"_rev": "_WmZ77Z---_",
"population": 1000000,
"isCapital": false,
"loc": [
53.5653,
10.0014
]
},
{
"_key": "Cologne",
"_id": "germanCity/Cologne",
"_rev": "_WmZ77Y6--B",
"population": 1000000,
"isCapital": false,
"loc": [
50.9364,
6.9528
] …Run Code Online (Sandbox Code Playgroud) 有没有人让一个正在运行的 arangoDB 数据库使用 Letencrypt 证书?我就是不知道如何运行。
ArangoDB 在 digitalOcean droplet 上运行,我可以按照本教程使用自签名证书将其一起运行。所以 arangoDB 在端口上成功运行:8530
现在我的方法是用 letencrypt 证书替换自签名证书。
所以我在 DigitalOcean 中添加了一个子域到 droplet。例如:db.example.com 然后生成证书文件:
sudo -H ./letsencrypt-auto certonly --standalone -d db.example.com
你最终会得到 4 个文件: cert.pem chain.pem fullchain.pem privkey.pem
据我了解,这些文件是:
Private Key --------> privkey.pem
Public Key ---------> cert.pem
Certificate Chain --> chain.pem
Run Code Online (Sandbox Code Playgroud)
正如我提到的教程中所述,您需要将证书和密钥放在一个文件中。所以我做了
cat chain.pem privkey.pem | sudo tee server.pem
有一个包含证书和私钥的文件。
然后我修改了文件/etc/arangodb3/arangod.conf,让 arango 知道密钥文件在哪里,并修改了 ssl 部分:
[ssl]
keyfile = /etc/letsencrypt/live/db.example.com/server.pem
Run Code Online (Sandbox Code Playgroud)
但是重启arango后,服务器不可用。尝试将浏览器连接到:https://db.example.com:8530。Droplet 的防火墙设置应该都没有问题,因为我之前可以使用自签名证书访问此地址。
然后我尝试修改端点/etc/arangodb3/arangod.conf从
endpoint = ssl://0.0.0.0:8530
Run Code Online (Sandbox Code Playgroud)
到 …
我想返回在图遍历查询期间遇到的所有唯一边和所有唯一顶点的列表。这给出了我想要的结果,但我执行了相同的查询两次:
LET eResults = (
FOR v,e
IN 1..2
ANY "entities/198593"
relations
OPTIONS { uniqueEdges: "path", bfs: true }
RETURN DISTINCT KEEP(e, "_key", "_from", "_to", "type")
)
LET vResults = (
FOR v,e
IN 1..2
ANY "entities/198593"
relations
OPTIONS { uniqueEdges: "path", bfs: true }
RETURN DISTINCT KEEP(v, "_key", "name")
)
RETURN { edges: eResults, vertices: vResults}
Run Code Online (Sandbox Code Playgroud)
查询结果,每条边和顶点只包含一次:
[
{
"edges": [
{
"_from": "entities/198593",
"_key": "391330",
"_to": "entities/198603",
"type": 300
},
{
"_from": "entities/198593",
"_key": "391390",
"_to": "entities/198477",
"type": …Run Code Online (Sandbox Code Playgroud) arangodb ×10
aql ×3
graph ×2
pyarango ×2
admin ×1
arangojs ×1
https ×1
javascript ×1
lets-encrypt ×1
logging ×1
node.js ×1
python ×1
python-3.x ×1
ssl ×1