README.md 17.0 KB
Newer Older
1
<div align="center">
2
  <img alt="QuestDB Logo" src="https://raw.githubusercontent.com/questdb/questdb/master/.github/logo-readme.png" width="305px"/>
3 4
</div>
<p>&nbsp;</p>
V
Vlad Ilyushchenko 已提交
5

V
Vlad Ilyushchenko 已提交
6
<p align="center">
7 8 9 10 11 12
  <a href="https://github.com/questdb/questdb/blob/master/LICENSE.txt">
    <img src="https://img.shields.io/github/license/questdb/questdb" />
  </a>
  <a href="https://www.codacy.com/app/bluestreak/nfsdb">
    <img src="https://api.codacy.com/project/badge/grade/83c6250bd9fc45a98c12c191af710754" />
  </a>
13 14
  <a href="https://dev.azure.com/questdb/questdb">
    <img src="https://dev.azure.com/questdb/questdb/_apis/build/status/Build%20and%20upload%20snapshot%20(Linux)?branchName=master" />
15 16
  </a>
  <a href="https://search.maven.org/search?q=g:org.questdb">
V
Vlad Ilyushchenko 已提交
17
    <img src="https://img.shields.io/maven-central/v/org.questdb/questdb" />
18
  </a>
19 20
  <a href="https://hub.docker.com/r/questdb/questdb">
    <img src="https://img.shields.io/docker/pulls/questdb/questdb.svg" />
21
  </a>
22 23 24
</p>

<div align="center">
25 26 27 28 29 30
  <a href="#contributors">
    <img src="https://img.shields.io/github/all-contributors/questdb/questdb" />
  </a>
  <a href="https://slack.questdb.io">
    <img src="https://slack.questdb.io/badge.svg" />
  </a>
31
</div>
V
Vlad Ilyushchenko 已提交
32 33

## What is QuestDB
V
Vlad Ilyushchenko 已提交
34

35 36 37 38 39
QuestDB is a high performance open source SQL database for time series data.

It uses a column-oriented approach, heavy parallelized vectorized execution,
SIMD instructions and a whole array of low-latency techniques. The whole code
base is built from scratch, without dependencies and 100% free from garbage
M
Méril 已提交
40
collection.
41

M
Méril 已提交
42 43 44 45 46 47
QuestDB implements SQL and augments it for time-series with native extensions.
It exposes a PostgreSQL wire protocol, high-performance REST API and supports
ingestion with InfluxDB Line Protocol. QuestDB uses a relational model with
maintenance-free schemas. Relational and time-series joins make it easy to
correlate data over time. Writes are durably committed to disk, meaning that the
data is safe - yet instantly accessible.
48 49

[QuestDB's documentation](https://questdb.io/docs/introduction/)
V
Vlad Ilyushchenko 已提交
50

51 52
## Live demo

V
Vlad Ilyushchenko 已提交
53
Query [our demo](https://demo.questdb.io) dataset with 1.6 billion rows in
54 55 56 57
milliseconds.

## Web Console

58
The interactive console to import data (drag and drop) and start querying right
59 60
away. Check our Web Console guide to get started:

61
<div align="center">
62
  <a href="https://questdb.io/docs/reference/web-console/">
63
    <img alt="Screenshot of the Web Console showing various SQL statements and the result of one as a chart" src=".github/console.png" width="400" />
64 65 66
  </a>
</div>
<div align="center">
67
  <a href="https://questdb.io/docs/reference/web-console/">
68 69 70
    Web Console guide
  </a>
</div>
71

V
Vlad Ilyushchenko 已提交
72
## Performance figures
V
Vlad Ilyushchenko 已提交
73

V
Vlad Ilyushchenko 已提交
74
### Raw figures
V
Vlad Ilyushchenko 已提交
75

76 77
Number operations per second **per thread**. Writes are durable and written to
disk.
V
Vlad Ilyushchenko 已提交
78

79 80 81 82
| Operation | 64-bit double  | 32-bit int     |
| --------- | -------------- | -------------- |
| Read      | 120 Million /s | 240 Million /s |
| Write     | 240 Million /s | 480 Million /s |
83 84 85

On a CPU with 6 memory channels, QuestDB can scan through **117GB of data per
second**.
V
Vlad Ilyushchenko 已提交
86

V
Vlad Ilyushchenko 已提交
87
### Queries
V
Vlad Ilyushchenko 已提交
88

89
Execution time on a c5.metal instance using 16 of the 96 threads available.
V
Vlad Ilyushchenko 已提交
90

91 92 93 94 95
| Query                                                     | Runtime    |
| --------------------------------------------------------- | ---------- |
| `SELECT sum(double) FROM 1bn`                             | 0.061 secs |
| `SELECT tag, sum(double) FROM 1bn`                        | 0.179 secs |
| `SELECT tag, sum(double) FROM 1bn WHERE timestamp='2019'` | 0.05 secs  |
V
Vlad Ilyushchenko 已提交
96

T
Tancrede 已提交
97 98
## Getting Started

V
Vlad Ilyushchenko 已提交
99
The easiest way to get started is with Docker:
T
Tancrede 已提交
100

101
```script
V
Vlad Ilyushchenko 已提交
102 103
docker run -p 9000:9000 -p 8812:8812 questdb/questdb
```
T
Tancrede 已提交
104

S
Sylvain Kerkour 已提交
105
You can find more information about Docker usage on the
106
[dedicated page](https://questdb.io/docs/get-started/docker/).
107

V
Vlad Ilyushchenko 已提交
108
#### Alternative methods
T
Tancrede 已提交
109

110 111
- [Start with Homebrew](https://questdb.io/docs/get-started/homebrew/)
- [Start with the binaries](https://questdb.io/docs/get-started/binaries/)
T
Tancrede 已提交
112

V
Vlad Ilyushchenko 已提交
113
### Connecting to QuestDB
T
Tancrede 已提交
114

V
Vlad Ilyushchenko 已提交
115
You can interact with QuestDB using:
T
Tancrede 已提交
116

117
- [Web Console](https://questdb.io/docs/reference/web-console/) listening
118 119 120
  on port `9000`: [localhost:9000](http://localhost:9000)
- [Postgres](https://questdb.io/docs/reference/api/postgres/) on port `8812`
- [REST API](https://questdb.io/docs/reference/api/rest/) on port `9000`
121

V
Vlad Ilyushchenko 已提交
122 123
Both the HTTP and PostgreSQL servers reference the database in
`<root_directory>/db`.
T
Tancrede 已提交
124

V
Vlad Ilyushchenko 已提交
125
You can connect to the Postgres server as follows. The default password is
126
`quest`:
V
Vlad Ilyushchenko 已提交
127

128
```script
V
Vlad Ilyushchenko 已提交
129 130
psql -h localhost -p 8812 -U admin -W -d qdb
```
131

V
Vlad Ilyushchenko 已提交
132
## Building from source
133

V
Vlad Ilyushchenko 已提交
134
#### (a) Prerequisites
135

V
Vlad Ilyushchenko 已提交
136 137
- Java 11 64-bit
- Maven 3
138
- Node.js 12 / NPM 6
139

140
```script
V
Vlad Ilyushchenko 已提交
141 142
java --version
mvn --version
143
node --version
V
Vlad Ilyushchenko 已提交
144
```
145

V
Vlad Ilyushchenko 已提交
146
#### (b) Clone the Repository
147

148
```script
149
git clone git@github.com:questdb/questdb.git
V
Vlad Ilyushchenko 已提交
150
```
V
Vlad Ilyushchenko 已提交
151

V
Vlad Ilyushchenko 已提交
152 153
#### (c) Build the Code

154 155
Commands below will create JAR without assembling executable binaries nor
building web console.
156

157
```script
V
Vlad Ilyushchenko 已提交
158
cd questdb
V
Vlad Ilyushchenko 已提交
159
mvn clean package -DskipTests
V
Vlad Ilyushchenko 已提交
160 161
```

162 163 164 165 166 167 168 169 170 171 172 173
To package web console with the jar use the following command:

```script
mvn clean package -DskipTests -P build-web-console
```

To build executable binaries use the following command:

```script
mvn clean package -DskipTests -P build-web-console,build-binaries
```

174 175 176
To run tests it is not required to have binaries built nor web console. There
are over 4000 tests that should complete without 2-6 minutes depending on the
system.
177 178 179 180

```script
mvn clean test
```
181

182 183 184
To release to Maven Central use the following command that activates deploy
profile. Ensure that your `~/.m2/settings.xml` contains username/password for
server `central` and `gnupg` is on hand to sign the artefacts.
185 186 187 188 189

```script
mvn -pl !benchmarks clean deploy -DskipTests -P build-web-console,maven-central-release
```

V
Vlad Ilyushchenko 已提交
190
#### (d) Run QuestDB
V
Vlad Ilyushchenko 已提交
191

192
```script
V
Vlad Ilyushchenko 已提交
193 194
# Create a database root directory and run QuestDB
mkdir <root_directory>
195
java -p core/target/questdb-5.0.5-SNAPSHOT.jar -m io.questdb/io.questdb.ServerMain -d <root_directory>
V
Vlad Ilyushchenko 已提交
196
```
197

V
Vlad Ilyushchenko 已提交
198 199 200
## Resources

Complete references are available in the
201
[Documentation](https://questdb.io/docs/introduction/).
V
Vlad Ilyushchenko 已提交
202

203
Get started:
V
Vlad Ilyushchenko 已提交
204

205 206 207
- [Docker](https://questdb.io/docs/get-started/docker/)
- [Binaries](https://questdb.io/docs/get-started/binaries/)
- [Homebrew](https://questdb.io/docs/get-started/homebrew/)
V
Vlad Ilyushchenko 已提交
208

209
Develop:
V
Vlad Ilyushchenko 已提交
210

211 212 213 214
- [Connect](https://questdb.io/docs/develop/connect/)
- [Insert data](https://questdb.io/docs/develop/insert-data/)
- [Query data](https://questdb.io/docs/develop/query-data/)
- [Authenticate](https://questdb.io/docs/develop/authenticate/)
V
Vlad Ilyushchenko 已提交
215 216 217

Concepts:

218 219 220 221
- [SQL extensions](https://questdb.io/docs/concept/sql-extensions/)
- [Storage model](https://questdb.io/docs/concept/storage-model/)
- [Partitions](https://questdb.io/docs/concept/partitions/)
- [Designated timestamp](https://questdb.io/docs/concept/designated-timestamp/)
V
Vlad Ilyushchenko 已提交
222

223 224
## Support / Contact

225
[Slack Channel](https://slack.questdb.io)
226 227 228 229 230

## Roadmap

[Our roadmap is here](https://github.com/questdb/questdb/projects/3)

T
Tancrede 已提交
231
## Contribution
V
Vlad Ilyushchenko 已提交
232

233 234 235
Feel free to contribute to the project by forking the repository and submitting
pull requests. Please make sure you have read our
[contributing guide](https://github.com/questdb/questdb/blob/master/CONTRIBUTING.md).
236 237 238

## Contributors ✨

V
Vlad Ilyushchenko 已提交
239
Thanks to these wonderful people
240
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
241 242 243 244 245

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
246 247 248 249 250 251
  <tr>
    <td align="center"><a href="https://github.com/clickingbuttons"><img src="https://avatars1.githubusercontent.com/u/43246297?v=4" width="100px;" alt=""/><br /><sub><b>clickingbuttons</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=clickingbuttons" title="Code">💻</a> <a href="#ideas-clickingbuttons" title="Ideas, Planning, & Feedback">🤔</a> <a href="#userTesting-clickingbuttons" title="User Testing">📓</a></td>
    <td align="center"><a href="https://github.com/ideoma"><img src="https://avatars0.githubusercontent.com/u/2159629?v=4" width="100px;" alt=""/><br /><sub><b>ideoma</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=ideoma" title="Code">💻</a> <a href="#userTesting-ideoma" title="User Testing">📓</a> <a href="https://github.com/questdb/questdb/commits?author=ideoma" title="Tests">⚠️</a></td>
    <td align="center"><a href="https://github.com/tonytamwk"><img src="https://avatars2.githubusercontent.com/u/20872271?v=4" width="100px;" alt=""/><br /><sub><b>tonytamwk</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=tonytamwk" title="Code">💻</a> <a href="#userTesting-tonytamwk" title="User Testing">📓</a></td>
    <td align="center"><a href="http://sirinath.com/"><img src="https://avatars2.githubusercontent.com/u/637415?v=4" width="100px;" alt=""/><br /><sub><b>sirinath</b></sub></a><br /><a href="#ideas-sirinath" title="Ideas, Planning, & Feedback">🤔</a></td>
    <td align="center"><a href="https://www.linkedin.com/in/suhorukov"><img src="https://avatars1.githubusercontent.com/u/10332206?v=4" width="100px;" alt=""/><br /><sub><b>igor-suhorukov</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=igor-suhorukov" title="Code">💻</a> <a href="#ideas-igor-suhorukov" title="Ideas, Planning, & Feedback">🤔</a></td>
252
    <td align="center"><a href="https://github.com/mick2004"><img src="https://avatars1.githubusercontent.com/u/2042132?v=4" width="100px;" alt=""/><br /><sub><b>mick2004</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=mick2004" title="Code">💻</a> <a href="#platform-mick2004" title="Packaging/porting to new platform">📦</a></td>
253
    <td align="center"><a href="https://rawkode.com"><img src="https://avatars3.githubusercontent.com/u/145816?v=4" width="100px;" alt=""/><br /><sub><b>rawkode</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=rawkode" title="Code">💻</a> <a href="#infra-rawkode" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
254
  </tr>
255
  <tr>
256
    <td align="center"><a href="https://solidnerd.dev"><img src="https://avatars0.githubusercontent.com/u/886383?v=4" width="100px;" alt=""/><br /><sub><b>solidnerd</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=solidnerd" title="Code">💻</a> <a href="#infra-solidnerd" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
257
    <td align="center"><a href="http://solanav.github.io"><img src="https://avatars1.githubusercontent.com/u/32469597?v=4" width="100px;" alt=""/><br /><sub><b>solanav</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=solanav" title="Code">💻</a> <a href="https://github.com/questdb/questdb/commits?author=solanav" title="Documentation">📖</a></td>
258
    <td align="center"><a href="https://shantanoo-desai.github.io"><img src="https://avatars1.githubusercontent.com/u/12070966?v=4" width="100px;" alt=""/><br /><sub><b>shantanoo-desai</b></sub></a><br /><a href="#blog-shantanoo-desai" title="Blogposts">📝</a> <a href="#example-shantanoo-desai" title="Examples">💡</a></td>
259
    <td align="center"><a href="http://alexprut.com"><img src="https://avatars2.githubusercontent.com/u/1648497?v=4" width="100px;" alt=""/><br /><sub><b>alexprut</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=alexprut" title="Code">💻</a> <a href="#maintenance-alexprut" title="Maintenance">🚧</a></td>
260
    <td align="center"><a href="https://github.com/lbowman"><img src="https://avatars1.githubusercontent.com/u/1477427?v=4" width="100px;" alt=""/><br /><sub><b>lbowman</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=lbowman" title="Code">💻</a> <a href="https://github.com/questdb/questdb/commits?author=lbowman" title="Tests">⚠️</a></td>
261
    <td align="center"><a href="https://tutswiki.com/"><img src="https://avatars1.githubusercontent.com/u/424822?v=4" width="100px;" alt=""/><br /><sub><b>chankeypathak</b></sub></a><br /><a href="#blog-chankeypathak" title="Blogposts">📝</a></td>
262
    <td align="center"><a href="https://github.com/upsidedownsmile"><img src="https://avatars0.githubusercontent.com/u/26444088?v=4" width="100px;" alt=""/><br /><sub><b>upsidedownsmile</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=upsidedownsmile" title="Code">💻</a></td>
263
  </tr>
264 265
  <tr>
    <td align="center"><a href="https://github.com/Nagriar"><img src="https://avatars0.githubusercontent.com/u/2361099?v=4" width="100px;" alt=""/><br /><sub><b>Nagriar</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=Nagriar" title="Code">💻</a></td>
266
    <td align="center"><a href="https://github.com/piotrrzysko"><img src="https://avatars.githubusercontent.com/u/6481553?v=4" width="100px;" alt=""/><br /><sub><b>piotrrzysko</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=piotrrzysko" title="Code">💻</a> <a href="https://github.com/questdb/questdb/commits?author=piotrrzysko" title="Tests">⚠️</a></td>
267
    <td align="center"><a href="https://github.com/mpsq/dotfiles"><img src="https://avatars.githubusercontent.com/u/5734722?v=4" width="100px;" alt=""/><br /><sub><b>mpsq</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=mpsq" title="Code">💻</a></td>
268
    <td align="center"><a href="https://github.com/siddheshlatkar"><img src="https://avatars.githubusercontent.com/u/39632173?v=4" width="100px;" alt=""/><br /><sub><b>siddheshlatkar</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=siddheshlatkar" title="Code">💻</a></td>
269
    <td align="center"><a href="http://yitaekhwang.com"><img src="https://avatars.githubusercontent.com/u/6628444?v=4" width="100px;" alt=""/><br /><sub><b>Yitaek</b></sub></a><br /><a href="#tutorial-Yitaek" title="Tutorials"></a> <a href="#example-Yitaek" title="Examples">💡</a></td>
270
    <td align="center"><a href="https://www.gaboros.hu"><img src="https://avatars.githubusercontent.com/u/19173947?v=4" width="100px;" alt=""/><br /><sub><b>gabor-boros</b></sub></a><br /><a href="#tutorial-gabor-boros" title="Tutorials"></a> <a href="#example-gabor-boros" title="Examples">💡</a></td>
271
    <td align="center"><a href="https://github.com/kovid-r"><img src="https://avatars.githubusercontent.com/u/62409489?v=4" width="100px;" alt=""/><br /><sub><b>kovid-r</b></sub></a><br /><a href="#tutorial-kovid-r" title="Tutorials"></a> <a href="#example-kovid-r" title="Examples">💡</a></td>
272
  </tr>
273 274
  <tr>
    <td align="center"><a href="https://borowski-software.de/"><img src="https://avatars.githubusercontent.com/u/8701341?v=4" width="100px;" alt=""/><br /><sub><b>TimBo93</b></sub></a><br /><a href="https://github.com/questdb/questdb/issues?q=author%3ATimBo93" title="Bug reports">🐛</a> <a href="#userTesting-TimBo93" title="User Testing">📓</a></td>
275
    <td align="center"><a href="http://zikani.me"><img src="https://avatars.githubusercontent.com/u/1501387?v=4" width="100px;" alt=""/><br /><sub><b>zikani03</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=zikani03" title="Code">💻</a></td>
276
    <td align="center"><a href="https://github.com/jaugsburger"><img src="https://avatars.githubusercontent.com/u/10787042?v=4" width="100px;" alt=""/><br /><sub><b>jaugsburger</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=jaugsburger" title="Code">💻</a> <a href="#maintenance-jaugsburger" title="Maintenance">🚧</a></td>
277
    <td align="center"><a href="http://www.questdb.io"><img src="https://avatars.githubusercontent.com/u/52114895?v=4" width="100px;" alt=""/><br /><sub><b>TheTanc</b></sub></a><br /><a href="#projectManagement-TheTanc" title="Project Management">📆</a> <a href="#content-TheTanc" title="Content">🖋</a> <a href="#ideas-TheTanc" title="Ideas, Planning, & Feedback">🤔</a></td>
278
    <td align="center"><a href="http://davidgs.com"><img src="https://avatars.githubusercontent.com/u/2071898?v=4" width="100px;" alt=""/><br /><sub><b>davidgs</b></sub></a><br /><a href="https://github.com/questdb/questdb/issues?q=author%3Adavidgs" title="Bug reports">🐛</a> <a href="#content-davidgs" title="Content">🖋</a></td>
279
    <td align="center"><a href="https://redalemeden.com"><img src="https://avatars.githubusercontent.com/u/519433?v=4" width="100px;" alt=""/><br /><sub><b>kaishin</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=kaishin" title="Code">💻</a> <a href="#example-kaishin" title="Examples">💡</a></td>
280
    <td align="center"><a href="https://questdb.io"><img src="https://avatars.githubusercontent.com/u/7276403?v=4" width="100px;" alt=""/><br /><sub><b>bluestreak01</b></sub></a><br /><a href="https://github.com/questdb/questdb/commits?author=bluestreak01" title="Code">💻</a> <a href="#maintenance-bluestreak01" title="Maintenance">🚧</a> <a href="https://github.com/questdb/questdb/commits?author=bluestreak01" title="Tests">⚠️</a></td>
281
  </tr>
282 283
</table>

284
<!-- markdownlint-restore -->
285
<!-- prettier-ignore-end -->
286

287 288
<!-- ALL-CONTRIBUTORS-LIST:END -->

289 290 291
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!