2016-10-06 18:27:38 +08:00
|
|
|
# Batch Queries
|
|
|
|
|
2016-10-17 22:00:30 +08:00
|
|
|
This document describes features from Batch Queries, it also details some internals that might be useful for maintainers
|
|
|
|
and developers.
|
|
|
|
|
|
|
|
|
|
|
|
## Redis data structures
|
|
|
|
|
|
|
|
### Jobs definition
|
|
|
|
|
|
|
|
Redis Hash: `batch:jobs:{UUID}`.
|
|
|
|
|
2021-04-08 01:03:09 +08:00
|
|
|
Redis DB: global.settings.batch_db || 5.
|
2016-10-17 22:00:30 +08:00
|
|
|
|
|
|
|
It stores the job definition, the user, and some metadata like the final status, the failure reason, and so.
|
|
|
|
|
|
|
|
### Job queues
|
|
|
|
|
|
|
|
Redis List: `batch:queue:{username}`.
|
|
|
|
|
2021-04-08 01:03:09 +08:00
|
|
|
Redis DB: global.settings.batch_db || 5.
|
2016-10-17 22:00:30 +08:00
|
|
|
|
|
|
|
It stores a pending list of jobs per user. It points to a job definition with the `{UUID}`.
|
|
|
|
|
|
|
|
### Job notifications
|
|
|
|
|
|
|
|
Redis Pub/Sub channel: `batch:users`.
|
|
|
|
|
|
|
|
Redis DB: 0.
|
|
|
|
|
|
|
|
In order to notify new jobs, it uses a Pub/Sub channel were the username for the queued job is published.
|
|
|
|
|
2016-10-06 18:27:38 +08:00
|
|
|
|
|
|
|
## Job types
|
|
|
|
|
2016-10-17 22:00:30 +08:00
|
|
|
Format for the currently supported query types, and what they are missing in terms of features.
|
|
|
|
|
2016-10-06 18:27:38 +08:00
|
|
|
### Simple
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"query": "update ..."
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Does not support main fallback queries. Ideally it should support something like:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"query": "update ...",
|
|
|
|
"onsuccess": "select 'general success fallback'",
|
|
|
|
"onerror": "select 'general error fallback'"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Multiple
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"query": [
|
|
|
|
"update ...",
|
|
|
|
"select ... into ..."
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Does not support main fallback queries. Ideally it should support something like:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"query": [
|
|
|
|
"update ...",
|
|
|
|
"select ... into ..."
|
|
|
|
],
|
|
|
|
"onsuccess": "select 'general success fallback'",
|
|
|
|
"onerror": "select 'general error fallback'"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Fallback
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"query": {
|
|
|
|
"query": [
|
|
|
|
{
|
|
|
|
"query": "select 1",
|
|
|
|
"onsuccess": "select 'success fallback query 1'",
|
|
|
|
"onerror": "select 'error fallback query 1'"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"query": "select 2",
|
|
|
|
"onerror": "select 'error fallback query 2'"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"onsuccess": "select 'general success fallback'",
|
|
|
|
"onerror": "select 'general error fallback'"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
It's weird to have two nested `query` attributes. Also, it's not possible to mix _plain_ with _fallback_ ones.
|
|
|
|
Ideally it should support something like:
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"query": [
|
|
|
|
{
|
|
|
|
"query": "select 1",
|
|
|
|
"onsuccess": "select 'success fallback query 1'",
|
|
|
|
"onerror": "select 'error fallback query 1'"
|
|
|
|
},
|
|
|
|
"select 2"
|
|
|
|
],
|
|
|
|
"onsuccess": "select 'general success fallback'",
|
|
|
|
"onerror": "select 'general error fallback'"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Where you don't need a nested `query` attribute, it's just an array as in Multiple job type, and you can mix objects and
|
|
|
|
plain queries.
|