标签: arangodb

ArangoDB 打开文件太多

几天以来,我们的 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

5
推荐指数
1
解决办法
1252
查看次数

将标签存储在图形数据库中

我找到了一些关于在关系数据库和文档数据库中设置标记系统的建议,但对于图形/多模型数据库没有任何建议。

我正在尝试为 ArangoDB 中的文档(我们称它们为“文章”)设置一个标记系统。我可以想到两种在 Arango 等多模型(图形+文档)数据库中存储标签的明显方法:

  • 作为每个文章文档中的数组(文档数据库样式)
  • 作为一个单独的文档类,每个标签作为一个唯一的文档,边缘将标签文档连接到文章文档(更接近关系数据库风格)

这些实际上是实现此目的的两种主要方法吗?两者都不理想。例如:

  • 如果我在每个文章文档中存储标签,我可以索引标签,大概 ArangoDB 正在优化它们使用的空间。但是,我不能使用图形特征来链接或遍历标签(或者我必须单独进行)。
  • 如果我将标签存储为单独的标签文档,当我只想获取文档上的标签列表时,这似乎是额外的开销(额外的查询)。

这让我提出了一个明确的问题:关于后一个选项,是否有任何简单的方法可以自动使连接的“标签”文档显示在文章文档中?例如,有一个数组属性以某种方式“镜像”tag.name了连接的标签文档的属性?

也欢迎一般性建议。

javascript graph-databases arangodb multi-model-database

5
推荐指数
1
解决办法
1677
查看次数

将批量数据导入 ArangoDB 的最佳方法

我目前正在研究 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)

graph arangodb pyarango

5
推荐指数
1
解决办法
1945
查看次数

如何检查 ArangoDB 中是否已存在集合

假设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)

也会工作得很好。只是它不存在并且不会显示在我的数据库中。如果它抛出一些错误或我可以使用的内容trycatch结果语句。但既然这是不可能的,我怎么知道集合是否已经存在?

node.js arangodb arangojs

5
推荐指数
1
解决办法
3002
查看次数

如何永久取消设置 ArangoDB 文档的属性?

我想从 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,但新版本未保存到数据库中,因此这似乎只是一个投影副本。

arangodb

5
推荐指数
2
解决办法
1190
查看次数

带有用于 ArangoDB 的 python-arango 驱动程序的 UPSERT

我使用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-3.x arangodb python-arango

5
推荐指数
1
解决办法
809
查看次数

我如何查看哪些查询已发送到 ArangoDB 服务器

我希望快速收集从使用 python-arangodb 驱动程序的应用程序发送到 ArangoDB 服务器的所有查询,而无需深入挖掘源代码,也无需嗅探 REST API 的 HTTP 流量。

ArangoDB Web UI 上是否没有一些管理/审核日志,可以显示哪些查询已发送到服务器?

这里使用3.2.5。

logging admin arangodb aql

5
推荐指数
1
解决办法
554
查看次数

ArangoDB 的图表 API pyArango

我正在使用 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)

JSON 输出

[
  {
    "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)

python graph arangodb aql pyarango

5
推荐指数
1
解决办法
1416
查看次数

ArangoDB 与 letsenrcypt 证书一起工作

有没有人让一个正在运行的 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)

到 …

ssl https arangodb lets-encrypt

5
推荐指数
1
解决办法
317
查看次数

在ArangoDB AQL中,如何从图遍历中返回顶点和边?

我想返回在图遍历查询期间遇到的所有唯一边和所有唯一顶点的列表。这给出了我想要的结果,但我执行了相同的查询两次:

    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 aql

5
推荐指数
1
解决办法
1302
查看次数