Skip to content
This repository was archived by the owner on Nov 7, 2025. It is now read-only.

Commit e2a481c

Browse files
authored
Add Compatibility Report documentation (#974)
1 parent 87656c9 commit e2a481c

File tree

9 files changed

+72
-6
lines changed

9 files changed

+72
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<a href="https://docs.quesma.com/eap-docs">Docs</a>
1919
</p>
2020

21-
Quesma is an actively developed database gateway currently in pre-alpha Early Access. Route your queries through a translation layer that seamlessly connects your apps with the modern database platforms of your choice. No more query refactoring during migrations.
21+
Quesma is an actively developed database gateway. Route your queries through a translation layer that seamlessly connects your apps with the modern database platforms of your choice. No more query refactoring during migrations.
2222

2323
How? Isn't migrating to a new database hard? Quesma does it without touching your application/client stack - keeping backward compatibility and moving safely, step-by-step. We translate your queries so you don’t have to rewrite your database query code during migrations.
2424

docs/public/docs/.vitepress/config.mts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { withMermaid } from "vitepress-plugin-mermaid";
33

44
// https://vitepress.dev/reference/site-config
55
export default defineConfig({
6-
title: "Quesma EAP",
6+
title: "Quesma",
77
description: "Quesma Database Gateway Early Access Program",
88
head: [['link', { rel: 'icon', href: 'favicon.ico' }]],
99
themeConfig: {
@@ -12,7 +12,7 @@ export default defineConfig({
1212
light: '/logo/quesma-logo-black-full-svg.svg',
1313
dark: '/logo/quesma-logo-white-full-svg.svg'
1414
},
15-
siteTitle: 'EAP',
15+
siteTitle: 'Docs',
1616
nav: [
1717
{ text: 'Home', link: '/' },
1818
{ text: 'Getting started', link: '/eap-docs' },
@@ -47,6 +47,7 @@ export default defineConfig({
4747
items: [
4848
{ text: 'Configuration primer', link: '/config-primer'},
4949
{ text: 'Ingest', link: '/ingest' },
50+
{ text: 'Compatiblity Report', link: '/compatibility-report' },
5051
],
5152
},
5253
{ text: 'Known limitations or unsupported functionalities', link: '/limitations' },
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Compatibility Report
2+
3+
Quesma can help validate your migration by sending queries to both Elasticsearch and ClickHouse simultaneously and comparing the results. This allows you to verify that queries return equivalent results from both systems before fully switching over.
4+
5+
You can enable Compatibility Report on an individual index level or for all (unconfigured) indexes via `*`. The configuration supports specifying which source (Elasticsearch or ClickHouse) should be the primary source to return results from and compare to.
6+
7+
Apart from validating correctness, Compatibility Report also measures the execution time difference (speedups or slowdowns) and generates a report per each dashboard and index.
8+
9+
## Configuration
10+
11+
Any index that has two targets (one Elastic type and one ClickHouse/Hydrolix type) will have Compatibility Report enabled:
12+
13+
```yaml
14+
processors:
15+
- name: my-query-processor
16+
type: quesma-v1-processor-query
17+
config:
18+
indexes:
19+
kibana_sample_data_ecommerce:
20+
target: [ backend-elastic, backend-clickhouse ]
21+
ab_testing_logs:
22+
target: [ backend-clickhouse ]
23+
- name: my-ingest-processor
24+
type: quesma-v1-processor-ingest
25+
config:
26+
indexes:
27+
ab_testing_logs:
28+
target: [ backend-clickhouse ]
29+
```
30+
31+
This configuration turns on Compatibility Report for `kibana_sample_data_ecommerce` index. The `ab_testing_logs` is an internal Quesma index which is required in the configuration for Compatibility Report to work properly.
32+
33+
The order of targets matters in the configuration - the first target will be the primary target that Kibana (or other applications) receives results from. In the example above, Quesma will:
34+
35+
1. Receive an incoming query from Kibana/OpenSearch Dashboards
36+
2. Send the same query to both Elasticsearch and ClickHouse
37+
3. Compare the responses to ensure they match
38+
4. Return the response from the Elastic to the client
39+
5. Log any discrepancies for analysis
40+
41+
## Accessing Compatibility Report
42+
43+
In the Quesma managment UI (default port `9999`) the "CR" tab shows a compatibility report based on the collected data:
44+
45+
![Kibana dashboards compatibility report](./public/quesma-cr/cr-1.png)
46+
47+
Upon clicking on the "Details" link, you can see a more detailed information about the discovered mismatch between sources.
48+
49+
![Compatibility Report - Panel Details](./public/quesma-cr/cr-2.png)
50+
51+
### Analyzing Compatibility Report
52+
53+
The Compatibility Report helps identify potential issues with performance and correctness between data sources.
54+
55+
The "performance gain" column shows the relative difference in query execution time between the two data sources. A positive percentage indicates that the second source (e.g. ClickHouse) is faster than the primary source (e.g. Elasticsearch), while a negative percentage means it's slower. We recommend starting your analysis by focusing on the dashboard panels most important for you.
56+
57+
If you notice slower performance for certain panels, you can analyze the specific queries by clicking "Details". Based on that information, consider manually optimizing the ClickHouse schema accordingly - for example by adjusting the table's `ORDER BY` clause or converting string columns to `LowCardinality(String)` type to improve query efficiency.
58+
59+
The "response similarity" column indicates whether there are any discrepancies between query results from different sources. Similar to performance analysis, we recommend prioritizing the validation of your most critical dashboard panels.
60+
61+
A response similarity value below 100.0% indicates that the sources returned different results. Before investigating these differences in detail, first verify that both sources contain identical data - ensure your ingest process is properly dual-writing and that neither source contains old records. Once data consistency is confirmed, examine the specific differences in the "Details" tab. While minor cosmetic variations may not impact Kibana's visualization, if you discover what appears to be a meaningful difference between sources, please report it by either opening an issue on [Quesma's GitHub repository](https://github.com/QuesmaOrg/quesma/issues/new) or contacting us directly at [email protected].

docs/public/docs/config-primer.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ The configuration for an index consists of the following configuration options:
192192
will dual write ingest requests to `my_index` to both ElasticSearch and ClickHouse.
193193
Note that ElasticSearch/OpenSearch is the only supported backend for the `*` entry.
194194
If no targets are provided (example: `target: []`) in the configuration of an index in the ingest processor, ingest for that index will be disabled and incoming data will be dropped.
195+
For the query processor by specifing multiple targets, [Compatibility report](/compatibility-report.md) will be enabled. See [Compatibility report documentation](/compatibility-report.md) for more details.
195196

196197
Some backend connectors have additional attributes which may be used. For example the following configuration sets `useCommonTable` for `backend-clickhouse` target:
197198
```yaml

docs/public/docs/eap-docs.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# What is Quesma?
22

3-
Quesma is an actively developed database gateway currently in Early Access Preview. Route your queries through a translation layer that seamlessly connects your apps with the modern database platforms of your choice. No more query refactoring during migrations.
3+
Quesma is an actively developed database gateway. Route your queries through a translation layer that seamlessly connects your apps with the modern database platforms of your choice. No more query refactoring during migrations.
44

5-
In its current (Early Access Preview) form, Quesma is a lightweight database proxy that enables database interoperability between Elasticsearch/OpenSearch and ClickHouse/Hydrolix.
5+
In its current form, Quesma is a lightweight database proxy that enables database interoperability between Elasticsearch/OpenSearch and ClickHouse/Hydrolix.
66

77

88
The high-level architecture is as follows:

docs/public/docs/index.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ hero:
77
light: /logo/quesma-logo-black-full-svg.svg
88
dark: /logo/quesma-logo-white-full-svg.svg
99
name: "Quesma Documentation"
10-
#text: "Quesma EAP docs"
1110
tagline: Welcome to the Quesma Documentation! This website will help you get started.
1211
actions:
1312
- theme: brand

docs/public/docs/limitations.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ Quesma has been tested with the following software versions:
1818
| OpenSearch/OpenSearch Dashboards | `2.12.0` |
1919
| Hydrolix | `v4.8.12` |
2020

21+
::: danger
22+
Quesma supports only ElasticSearch/Kibana 8.0 or above.
23+
:::
24+
2125
### ClickHouse limitations
2226
* When using a cluster deployment of ClickHouse, the tables automatically created by Quesma (during [Ingest](/ingest.md)) will use the `MergeTree` engine. If you wish to use the `ReplicatedMergeTree` engine instead, you will have to create the tables manually with `ReplicatedMergeTree` engine before ingesting data to Quesma.
2327
* *Note: On ClickHouse Cloud, the tables automatically created by Quesma will use the `ReplicatedMergeTree` engine (ClickHouse Cloud default engine).*
604 KB
Loading
101 KB
Loading

0 commit comments

Comments
 (0)