Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/xinz/ex_aliyun_ots

Alibaba TableStore SDK for Elixir/Erlang
https://github.com/xinz/ex_aliyun_ots

aliyun-ots aliyun-tablestore-sdk elixir tablestore

Last synced: 4 days ago
JSON representation

Alibaba TableStore SDK for Elixir/Erlang

Awesome Lists containing this project

README

        

# ExAliyunOts

[![Coverage Status](https://coveralls.io/repos/github/xinz/ex_aliyun_ots/badge.svg?branch=master)](https://coveralls.io/github/xinz/ex_aliyun_ots?branch=master)
[![Module Version](https://img.shields.io/hexpm/v/ex_aliyun_ots.svg)](https://hex.pm/packages/ex_aliyun_ots)
[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/ex_aliyun_ots/)
[![Total Download](https://img.shields.io/hexpm/dt/ex_aliyun_ots.svg)](https://hex.pm/packages/ex_aliyun_ots)
[![License](https://img.shields.io/hexpm/l/ex_aliyun_ots.svg)](https://github.com/xinz/ex_aliyun_ots/blob/master/LICENSE)
[![Last Updated](https://img.shields.io/github/last-commit/xinz/ex_aliyun_ots.svg)](https://github.com/xinz/ex_aliyun_ots/commits/master)

Aliyun [TableStore](https://www.alibabacloud.com/product/table-store) SDK for Elixir/Erlang

> TableStore is a NoSQL database service built on Alibaba Cloud’s Apsara distributed operating system that can store and access large volumes of structured data in real time.

## Installation

```elixir
def deps do
[
{:ex_aliyun_ots, "~> 0.11"}
]
end
```

## Configuration

Add these settings below into the `config/ots.secret.exs` file.

```elixir
config :ex_aliyun_ots, :my_instance,
name: "MyInstanceName",
endpoint: "MyInstanceEndpoint",
access_key_id: "MyAliyunRAMKeyID",
access_key_secret: "MyAliyunRAMKeySecret",
pool_size: 100,
pool_count: 1

config :ex_aliyun_ots,
instances: [:my_instance],
debug: false,
enable_tunnel: false
```

* `debug`, optional, specifies whether to enable debug logger, by default it is false, and please DO NOT use debug mode in production.
* `enable_tunnel`, optional, specifies whether to enable tunnel functions, there will startup tunnel related supervisor and registry when enable it, by default it is false.
* `pool_size`, optional, number of connections to maintain in each pool, involved when use `Finch` as Tesla http adapter, see `Finch` [module usage](https://hexdocs.pm/finch/Finch.html#module-usage) for details, defaults to 100.
* `pool_count`, optional, number of pools to start, involved when use `Finch` as Tesla http adapter, see `Finch` [module usage](https://hexdocs.pm/finch/Finch.html#module-usage) for details, defaults to 1.

## Using ExAliyunOts

To use `ExAliyunOts`, a module that calls `use ExAliyunOts` has to be defined:

```elixir
defmodule MyApp.TableStore do
use ExAliyunOts, instance: :my_instance
end
```

This automatically defines some macros and functions in the `MyApp.TableStore` module, here are some examples:

```elixir
import MyApp.TableStore

# Create table
create_table "table",
[{"pk1", :integer}, {"pk2", :string}]

# Put row
put_row "table",
[{"pk1", "id1"}],
[{"attr1", 10}, {"attr2", "attr2_value"}],
condition: condition(:expect_not_exist),
return_type: :pk

# Search index
search "table", "index_name",
search_query: [
query: match_query("age", 28),
sort: [
field_sort("age", order: :desc)
]
]

# Local transaction
start_local_transaction "table", {"partition_key", "partition_value"}
```

## ExAliyunOts API

There are two ways to use ExAliyunOts:

* using macros and functions from your own ExAliyunOts module, like `MyApp.TableStore`.
* using macros and functions from the `ExAliyunOts` module.

All defined functions and macros in `ExAliyunOts` are available and referable for your own ExAliyunOts module as well, except that the given arity of functions may different, because the `instance` parameter of each invoke request is NOT needed from your own ExAliyunOts module although the `ExAliyunOts` module defines it.

## Ecto Adapter

Here is a [Tablestore adapter for Ecto](https://hex.pm/packages/ecto_tablestore) implementation as an alternative.

## Supported Functions

* Table Operations
* Row Operations
* Conditional update
* Auto-increment function of the primary key column
* Filter
* Atomic counters
* Search index
* Local transaction
* Tunnel service
* Timeline mode

## Supported API

* Table
* CreateTable
* ListTable
* DeleteTable
* UpdateTable
* DescribeTable
* ComputeSplitPointsBySize

* Row
* PutRow
* GetRow
* UpdateRow
* DeleteRow
* GetRange
* BatchGetRow
* BatchWriteRow

* SearchIndex
* CreateSearchIndex
* DescribeSearchIndex
* DeleteSearchIndex
* Search
* ParallelScan

* LocalTransaction
* StartLocalTransaction
* CommitTransaction
* AbortTransaction

* SDK built-in
* IterateAllRange
* IterateParallelScan
* IterateSearch
* Sequence
* StreamParallelScan
* StreamRange
* StreamSearch

* Tunnel service
* Timeline mode

## Thanks

Thanks very much for the help and support of the Alibaba TableStore offical support team.

## References

Alibaba Tablestore product official references:

* [English document](https://www.alibabacloud.com/help/doc-detail/27280.htm)
* [中文文档](https://help.aliyun.com/document_detail/27280.html)

## License

This project is licensed under the MIT license. Copyright (c) 2018- Xin Zou.