tarantool~vladfaust

0.2.3 Latest release released
vladfaust/tarantool.cr
18 5 3
Vlad Faust

Tarantool

Built with Crystal Build status API Docs Releases Awesome vladfaust.com Patrons count Gitter chat

The Tarantool driver for Crystal.

Supporters

Thanks to all my patrons, I can continue working on beautiful Open Source Software! 🙏

Lauri Jutila, Alexander Maslov, Dainel Vera

You can become a patron too in exchange of prioritized support and other perks

Become Patron

About

Tarantool is a super-fast NoSQL* in-memory database. Crystal is a super-fast compiled language. Take both.

* It is planned to fully support SQL in version 2, which is currently in alpha

Benchmarks

Recent benchmarking of 100k select requests on a single 0.90Ghz CPU core with Tarantool running on the same machine via Docker:

$ crystal bench/select.cr --release
  1.530000   1.070000   2.600000 (  2.597737)

Resulting performance is 38.4k RPS, averaging in 26μs per request.

Projects using Tarantool

Installation

Add this to your application's shard.yml:

dependencies:
  tarantool:
    github: vladfaust/tarantool.cr
    version: ~> 0.2.2

This shard follows Semantic Versioning 2.0.0, so see releases and change the version accordingly.

Usage

After you installed and run Tarantool and setup your schema, do:

require "tarantool"

db = Tarantool::Connection.new("localhost", 3301) # Initiate the connection
db.parse_schema # Save current box schema to db instance
db.insert(:examples, {1, "hello"}) # Insert "hello" tuple
db.update(:examples, :primary, {1}, {"=", 1, "hello world"}) # Replace "hello" with "hello world"
db.select(:examples, :name, {"hello world"}).body.data # => [[1, "hello world"]]

All Tarantool::Connection#* requests are synchronous, they will be waiting until the response is received. However, a single Tarantool instance itself is capable of handling lots of simultaneous connections, so for the best perfomance consider running requests in multiple fibers:

32.times do
  spawn do
    db.ping # All 32 pings are executed concurrently
  end
end

Testing

  1. Run docker run --name mytarantool -d -p 3301:3301 -v /var/lib/docker/volumes/tarantool:/var/lib/tarantool tarantool/tarantool:1
  2. Connect to tarantool via console (docker exec -i -t mytarantool console) and apply schema found in /spec/helpers.lua
  3. crystal spec

Contributing

  1. Fork it ( https://github.com/vladfaust/tarantool.cr/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

tarantool:
  github: vladfaust/tarantool.cr
  version: ~> 0.2.3
License MIT
Crystal 0.26.0

Authors

Dependencies 2

  • msgpack ~> 0.10.0
    {'github' => 'crystal-community/msgpack-crystal', 'version' => '~> 0.10.0'}
  • time_format ~> 0.1.0
    {'github' => 'vladfaust/time_format.cr', 'version' => '~> 0.1.0'}

Development Dependencies 0

Dependents 0

Last synced .
search fire star recently