ArangoDB 读取超时(读取超时=60)
ArangoDB Read timed out (read timeout=60)
我有问题。我通过 Docker
使用 ArangoDB enterprise:3.8.6
。但不幸的是,我的查询花费的时间比 30s
长。
失败时,错误为arangodb HTTPConnectionPool(host='127.0.0.1', port=8529): Read timed out. (read timeout=60)
.
- 我的 collection 大约有 4GB,collection.
中有 ~ 1.2 mio - 900k 文档
我怎样才能得到完整的 collection 以及所有文档而没有任何错误?
Python 代码(在我的机器上本地运行)
from arango import ArangoClient
# Initialize the ArangoDB client.
client = ArangoClient()
# Connect to database as user.
db = client.db(<db>, username=<username>, password=<password>)
cursor = db.aql.execute(f'FOR doc IN students RETURN doc', batch_size=10000)
result = [doc for doc in cursor]
print(result[0])
[OUT]
arangodb HTTPConnectionPool(host='127.0.0.1', port=8529): Read timed out. (read timeout=60)
docker-compose.yml for ArangoDB
version: '3.7'
services:
database:
container_name: database__arangodb
image: arangodb/enterprise:3.8.6
environment:
- ARANGO_LICENSE_KEY=<key>
- ARANGO_ROOT_PASSWORD=root
- ARANGO_CONNECT_TIMEOUT=300
- ARANGO_READ_TIMEOUT=600
ports:
- 8529:8529
volumes:
- C:/Users/dataset:/var/lib/arangodb3
我试过的
cursor = db.aql.execute('FOR doc IN <Collection> RETURN doc', stream=True)
while cursor.has_more(): # Fetch until nothing is left on the server.
cursor.fetch()
while not cursor.empty(): # Pop until nothing is left on the cursor.
cursor.pop()
[OUT] CursorNextError: [HTTP 404][ERR 1600] cursor not found
# A N D
cursor = db.aql.execute('FOR doc IN <Collection> RETURN doc', stream=True, ttl=3600)
collection = [doc for doc in cursor]
[OUT] nothing # Runs, runs and runs for more than 1 1/2 hours
什么有效但 仅适用于 100 个文档
# And that worked
cursor = db.aql.execute(f'FOR doc IN <Collection> LIMIT 100 RETURN doc', stream=True)
collection = [doc for doc in cursor]
您可以为 Arango 增加 HTTP 客户端的 timeout by using a custom HTTP client。
默认设置 here 为 60 秒。
from arango.http import HTTPClient
class MyCustomHTTPClient(HTTPClient):
REQUEST_TIMEOUT = 1000 # Set the timeout you want in seconds here
# Pass an instance of your custom HTTP client to Arango:
client = ArangoClient(
http_client=MyCustomHTTPClient()
)
我有问题。我通过 Docker
使用 ArangoDB enterprise:3.8.6
。但不幸的是,我的查询花费的时间比 30s
长。
失败时,错误为arangodb HTTPConnectionPool(host='127.0.0.1', port=8529): Read timed out. (read timeout=60)
.
- 我的 collection 大约有 4GB,collection. 中有 ~ 1.2 mio - 900k 文档
我怎样才能得到完整的 collection 以及所有文档而没有任何错误?
Python 代码(在我的机器上本地运行)
from arango import ArangoClient
# Initialize the ArangoDB client.
client = ArangoClient()
# Connect to database as user.
db = client.db(<db>, username=<username>, password=<password>)
cursor = db.aql.execute(f'FOR doc IN students RETURN doc', batch_size=10000)
result = [doc for doc in cursor]
print(result[0])
[OUT]
arangodb HTTPConnectionPool(host='127.0.0.1', port=8529): Read timed out. (read timeout=60)
docker-compose.yml for ArangoDB
version: '3.7'
services:
database:
container_name: database__arangodb
image: arangodb/enterprise:3.8.6
environment:
- ARANGO_LICENSE_KEY=<key>
- ARANGO_ROOT_PASSWORD=root
- ARANGO_CONNECT_TIMEOUT=300
- ARANGO_READ_TIMEOUT=600
ports:
- 8529:8529
volumes:
- C:/Users/dataset:/var/lib/arangodb3
我试过的
cursor = db.aql.execute('FOR doc IN <Collection> RETURN doc', stream=True)
while cursor.has_more(): # Fetch until nothing is left on the server.
cursor.fetch()
while not cursor.empty(): # Pop until nothing is left on the cursor.
cursor.pop()
[OUT] CursorNextError: [HTTP 404][ERR 1600] cursor not found
# A N D
cursor = db.aql.execute('FOR doc IN <Collection> RETURN doc', stream=True, ttl=3600)
collection = [doc for doc in cursor]
[OUT] nothing # Runs, runs and runs for more than 1 1/2 hours
什么有效但 仅适用于 100 个文档
# And that worked
cursor = db.aql.execute(f'FOR doc IN <Collection> LIMIT 100 RETURN doc', stream=True)
collection = [doc for doc in cursor]
您可以为 Arango 增加 HTTP 客户端的 timeout by using a custom HTTP client。
默认设置 here 为 60 秒。
from arango.http import HTTPClient
class MyCustomHTTPClient(HTTPClient):
REQUEST_TIMEOUT = 1000 # Set the timeout you want in seconds here
# Pass an instance of your custom HTTP client to Arango:
client = ArangoClient(
http_client=MyCustomHTTPClient()
)