opentradesolutions / Opentick
Licence: apache-2.0
A fast tick database for financial timeseries data, built on FoundationDB with simplified SQL layer
Stars: ✭ 144
Labels
Projects that are alternatives of or similar to Opentick
Developer Handbook
An opinionated guide on how to become a professional Web/Mobile App Developer.
Stars: ✭ 1,830 (+1170.83%)
Mutual labels: sql
Laravel Db Profiler
Database Profiler for Laravel Web and Console Applications.
Stars: ✭ 141 (-2.08%)
Mutual labels: sql
Quicklogger
Library for logging on files, console, memory, email, rest, eventlog, syslog, slack, telegram, redis, logstash, elasticsearch, influxdb, graylog, Sentry, Twilio, ide debug messages and throw events for Delphi/Firemonkey/freepascal/.NET (Windows/Linux/OSX/IOS/Android).
Stars: ✭ 137 (-4.86%)
Mutual labels: sql
Stratosdb
☄️ ☁️ An All-in-One GUI for Cloud SQL that can help users design and test their AWS RDS Instances
Stars: ✭ 140 (-2.78%)
Mutual labels: sql
Reactive record
Generate ActiveRecord models for a pre-existing Postgres db
Stars: ✭ 132 (-8.33%)
Mutual labels: sql
Sequelize Ui
Browser-based GUI for previewing and generating Sequelize project files.
Stars: ✭ 142 (-1.39%)
Mutual labels: sql
Quicksql
A Flexible, Fast, Federated(3F) SQL Analysis Middleware for Multiple Data Sources
Stars: ✭ 1,821 (+1164.58%)
Mutual labels: sql
Prometheus Sql
Service that exposes Prometheus metrics for a SQL result set.
Stars: ✭ 140 (-2.78%)
Mutual labels: sql
Mysql
Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package
Stars: ✭ 11,735 (+8049.31%)
Mutual labels: sql
Php Login System
Embeddable and Secure PHP Authentication System with Login, Signup, User Profiles, Profile Editing, Account Verification via Email, Password Reset System, Remember-Me Feature and more.
Stars: ✭ 135 (-6.25%)
Mutual labels: sql
Dbr
Additions to Go's database/sql for super fast performance and convenience. (fork of gocraft/dbr)
Stars: ✭ 140 (-2.78%)
Mutual labels: sql
Dumpling
Dumpling is a fast, easy-to-use tool written by Go for dumping data from the database(MySQL, TiDB...) to local/cloud(S3, GCP...) in multifarious formats(SQL, CSV...).
Stars: ✭ 134 (-6.94%)
Mutual labels: sql
Esparser
PHP write SQL to convert DSL to query Elasticsearch
Stars: ✭ 142 (-1.39%)
Mutual labels: sql
Roq Api
API for algorithmic and high-frequency trading
Stars: ✭ 132 (-8.33%)
Mutual labels: market-data
Django Postgres Copy
Quickly import and export delimited data with Django support for PostgreSQL's COPY command
Stars: ✭ 139 (-3.47%)
Mutual labels: sql
Data Science Question Answer
A repo for data science related questions and answers
Stars: ✭ 2,000 (+1288.89%)
Mutual labels: sql
Builder
Lightweight and fast SQL builder for Go language, moved to https://gitea.com/xorm/builder
Stars: ✭ 140 (-2.78%)
Mutual labels: sql
OpenTick
OpenTick is a fast tick database for financial timeseries data, built on FoundationDB with simplified SQL layer.
Features:
-
Built-in price adjustment support
-
Nanosecond support
-
Python, C++ and Go SDK
-
Both sync and async query
-
Implicit SQL statement prepare
-
Permission Control, check Python API for related functions, turned off by default
-
Cache
Installation on Ubuntu
You need to use Go >=1.11 which has module support.
sudo apt install -y python
wget https://www.foundationdb.org/downloads/6.2.22/ubuntu/installers/foundationdb-server_6.2.22-1_amd64.deb
wget https://www.foundationdb.org/downloads/6.2.22/ubuntu/installers/foundationdb-clients_6.2.22-1_amd64.deb
sudo dpkg -i foundationdb-clients_6.2.22-1_amd64.deb foundationdb-server_6.2.22-1_amd64.deb
git clone https://github.com/opentradesolutions/opentick
make build
sudo apt install nodejs
sudo npm install -g pm2
pm2 start ./opentick
Note: FoundationDB runs in memory storage mode and only one process by default. You can change it to disk storage as belows:
[email protected]$ fdbcli
fdb> configure ssd
Fore more configuration on FoundationDB, please check FoundationDB Configuration
Usage
pip install opentick
Performance
100k ohlcv bar inserted in 1 second.
[email protected]:~/opentick/bindings/go$ go run test.go
2018/11/27 21:27:23 4.500470184s 5.500314708s 0 100000 all insert futures get done
2018/11/27 21:27:25 861.306778ms 1.139363333s 0 10 all batch insert futures get done
2018/11/27 21:27:26 805.542584ms 100000 retrieved with ranges
2018/11/27 21:27:27 1.782497936s 100000 retrieved with async
2018/11/27 21:27:29 1.424262818s 100000 retrieved with one sync
[email protected]:~/opentick/bindings/python$ ./test.py
2018-11-27 21:29:10.168138 0:00:00.200577 0:00:06.724991 0 100000 all insert futures get done
2018-11-27 21:29:12.192570 0:00:00.176540 0:00:00.959563 0 10 all batch insert futures get done
2018-11-27 21:29:13.460025 0:00:01.267462 100000 retrieved with ranges
2018-11-27 21:29:15.077686 0:00:01.617666 100000 retrieved with async
2018-11-27 21:29:16.777043 0:00:01.699361 100000 retrieved with one sync
[email protected]:~/opentick/bindings/cpp$ make test
21:33:19.231156889: 4.22207s 4.84954s 0 100000 all insert futures get done
21:33:20.172744180: 0.447708s 0.934337s 0 10 all batch insert futures get done
21:33:21.677161076: 1.49497s 100000 retrieved with async
Sample Code (C++)
- Create database and table
auto conn = Connection::Create("127.0.0.1", 1116);
conn->Start();
conn->Execute("create database if not exists test");
conn->Use("test");
conn->Execute(R"(
create table if not exists test(sec int, interval int, tm timestamp,
open double, high double, low double, close double, v double, vwap
double, primary key(sec, interval, tm))
)");
- Execute
// opentick prepares the sql statement automatically, no need to prepare explicitly
auto fut = conn->ExecuteAsync(
"select * from test where sec=1 and interval=?", Args{1}));
auto res = fut->Get(); // blocked wait until execution done
// Get last 2 rows ordering by primary key
auto res = conn->Execute(
"select tm from test where sec=1 and interval=? limit -2", Args{1});
- Insert
static const std::string kInsert =
"insert into test(sec, interval, tm, open, high, low, close, vol, vwap) "
"values(?, ?, ?, ?, ?, ?, ?, ?, ?)";
std::vector<Future> futs;
for (auto i = 0; i < 1000; ++i) {
futs.push_back(conn->ExecuteAsync(kInsert, Args{1, 1, system_clock::now(), 2.2, 2.4, 2.1, 2.3, 1000000, 2.25}));
}
// wait for all insertion done
for (auto fut : futs) fut->Get();
- Batch Insert
Argss argss;
for (auto i = 0; i < 1000; ++i) {
argss.push_back(Args{1, i, system_clock::now(), 2.2, 2.4, 2.1, 2.3, 1000000, 2.25});
}
conn->BatchInsert(kInsert, argss);
- Price Adjustments
auto res = conn->Execute(
"select tm, adj(open), adj(high), adj(low), adj(close), adj(vol) from test where sec=1 and interval=? limit -2", Args{1});
For more details, please checkout adj_test.go
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].