influxdb/README.md

204 lines
5.8 KiB
Markdown
Raw Normal View History

# InfluxDB IOx
2019-11-22 22:10:37 +00:00
TODO: Blog post summary here
2020-04-24 14:36:59 +00:00
## Quick Start
2020-04-24 14:36:59 +00:00
To compile and run InfluxDB IOx from source, you'll need a Rust compiler and a `flatc` FlatBuffers
compiler.
### Cloning the Repository
Using `git`, check out the code by cloning this repository. If you use the `git` command line, this
looks like:
```
$ git clone git@github.com:influxdata/influxdb_iox.git
```
Then change into the directory containing the code:
```
$ cd influxdb_iox
```
The rest of the instructions assume you are in this directory.
### Installing Rust
The easiest way to install Rust is by using [`rustup`], a Rust version manager.
Follow the instructions on the `rustup` site for your operating system.
[`rustup`]: https://rustup.rs/
InfluxDB IOx is currently using a nightly version of Rust to get performance benefits from the
unstable `simd` feature. The exact nightly version is specified in the `rust-toolchain` file. By
default, `rustup` will look in this file and automatically install the correct version for you.
### Installing `flatc`
InfluxDB IOx uses the [FlatBuffer] serialization format for its write-ahead log. The [`flatc`
compiler] reads the schema in `generated_types/wal.fbs` and generates the corresponding Rust code.
Install `flatc` >= 1.12.0 with one of these methods as appropriate to your operating system:
- Using a [Windows binary release]
- Using the [`flatbuffers` package for conda]
- Using the [`flatbuffers` package for Arch Linux]
- Using the [`flatbuffers` package for Homebrew]
Once you have installed the packages, you should be able to run:
```
$ flatc --version
```
and see the version displayed.
You won't have to run `flatc` directly; once it's available, Rust's Cargo build tool manages the
compilation process by calling `flatc` for you.
[FlatBuffer]: https://google.github.io/flatbuffers/
[`flatc` compiler]: https://google.github.io/flatbuffers/flatbuffers_guide_using_schema_compiler.html
[Windows binary release]: https://github.com/google/flatbuffers/releases
[`flatbuffers` package for conda]: https://anaconda.org/conda-forge/flatbuffers
[`flatbuffers` package for Arch Linux]: https://www.archlinux.org/packages/community/x86_64/flatbuffers/
[`flatbuffers` package for Homebrew]: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/flatbuffers.rb
### Specifying Configuration
**OPTIONAL:** There are a number of configuration variables you can choose to customize by
specifying values for environment variables in a `.env` file. To get an example file to start from,
run:
```
cp docs/env.example .env
```
then edit the newly-created `.env` file.
For development purposes, the most relevant environment variables are the `INFLUXDB_IOX_DB_DIR` and
`TEST_INFLUXDB_IOX_DB_DIR` variables that configure where files are stored on disk. The default
values are shown in the comments in the example file; to change them, uncomment the relevant lines
and change the values to the directories in which you'd like to store the files instead:
```
INFLUXDB_IOX_DB_DIR=/some/place/else
TEST_INFLUXDB_IOX_DB_DIR=/another/place
```
### Compiling and Starting the Server
InfluxDB IOx is built using Cargo, Rust's package manager and build tool.
To compile for development, run:
```
$ cargo build
```
which will create a binary in `target/debug` that you can run with:
```
$ ./target/debug/influxdb_iox
```
You can compile and run with one command by using:
```
$ cargo run
```
When compiling for performance testing, build in release mode by using:
```
$ cargo build --release
```
which will create the corresponding binary in `target/release`:
```
$ ./target/release/influxdb_iox
```
Similarly, you can do this in one step with:
```
$ cargo run --release
```
The server will, by default, start an HTTP API server on port `8080` and a gRPC server on port
`8082`.
### Writing and Reading Data
Data can be stored in InfluxDB IOx by sending it in [line protocol] format to the `/api/v2/write`
endpoint. Data is stored by organization and bucket names. Here's an example using [`curl`] with
the organization name `company` and the bucket name `sensors` that will send the data in the
`tests/fixtures/lineproto/metrics.lp` file in this repository, assuming that you're running the
server on the default port:
```
curl -v "http://127.0.0.1:8080/api/v2/write?org=company&bucket=sensors" --data-binary @tests/fixtures/lineproto/metrics.lp
```
[line protocol]: https://docs.influxdata.com/influxdb/v2.0/reference/syntax/line-protocol/
[`curl`]: https://curl.se/
To query stored data, use the `/api/v2/read` endpoint with a SQL query. This example will return
all data in the `company` organization's `sensors` bucket for the `processes` measurement:
```
$ curl -v -G -d 'org=company' -d 'bucket=sensors' --data-urlencode 'sql_query=select * from processes' "http://127.0.0.1:8080/api/v2/read"
```
## Contributing
If you want to contribute to InfluxDB IOx you will need to sign InfluxData's CLA, which can be
found with more information [on our website].
[on our website]: https://www.influxdata.com/legal/cla/
InfluxDB IOx is written mostly in idiomatic Rust -- please see the [Style Guide] for more details.
[Style Guide]: docs/style_guide.md
### Running Tests
The `cargo` build tool runs tests as well. Run:
```
$ cargo test --workspace
```
### Running `rustfmt` and `clippy`
CI will check the code formatting with [`rustfmt`] and Rust best practices with [`clippy`].
To automatically format your code according to `rustfmt` style, first make sure `rustfmt` is installed using `rustup`:
```
$ rustup component add rustfmt
```
Then, whenever you make a change and want to reformat, run:
```
$ cargo fmt --all
```
Similarly with `clippy`, install with:
```
$ rustup component add clippy
```
And run with:
```
$ cargo clippy --all-targets --workspace
```
[`rustfmt`]: https://github.com/rust-lang/rustfmt
[`clippy`]: https://github.com/rust-lang/rust-clippy