quadgo

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2020 License: MIT Imports: 11 Imported by: 0

README

quadgo

The official QuadrilleDB Go Driver

Travis Build Go Report Card

Quadgo is the official QuadrilleDB Go driver. It has a simple and intuitive API which enables Go developers to quickly get up and running without any hassle.

Features

Cluster Discovery

Quadgo offers automatic cluster discovery. Given only a single node address, it finds out cluster info and connects to the leader

Automatic Failover Management

Quadgo will automatically failover in case a change in leader is detected

Synchronous and Concurrent

Quadgo provides a synchronous interface and is built with high concurreny in mind. To achieve high degree of concurrency, quadgo maintains a connection pool and multiplexes multiple requests onto each of these connections. It also uses pipelining to send consecutive requests without waiting for responses to arrive for previous requests.

Getting Started

To get the package, execute

go get github.com/quadrille/quadgo

To import the package, add following line to you code

import "github.com/quadrille/quadgo"

Get quadgo client instance

quadClient := quadgo.NewClient("localhost:5679")

quadgo uses Singleton to create the client. Therefore you can safely get the same client instance by calling NewClient from multiple Goroutines

Insert Location

//func (q *quadrilleClient) AddLocation(locationID string, latitude, longitude float64, data map[string]interface{}) (err error)
err := quadgo.Insert("loc123", 12.9660585, 77.7157481, map[string]interface{}{"some_key": "some_val"})

Get Location

//func (q *quadrilleClient) Get(locationID string) (*Location, error)
location,err := quadgo.Get("loc123")

Get Nearby locations

//func (q *quadrilleClient) Nearby(latitude, longitude float64, radiusInMeters, limit int) (neighbors []NeighborResult, err error)
results, err := quadgo.Nearby(12.9659327, 77.7168568, 500, 10)

Delete Location

//func (q *quadrilleClient) Delete(locationID string) (err error)
err := quadgo.Delete("loc123")

Update Location

Complete replace

//func (q *QuadrilleClient) Update(locationID string, latitude, longitude float64, data map[string]interface{}) (err error)
err := quadgo.Update("loc123", 12.9958017, 77.6942081, map[string]interface{}{"some_key": "some_val2"})

Update location only

//func (q *QuadrilleClient) UpdateLocation(locationID string, latitude, longitude float64) (err error)
err := quadgo.UpdateLocation("loc123", 12.9958017, 77.6942081)

Update data only

//func (q *QuadrilleClient) UpdateData(locationID string, data map[string]interface{}) (err error)
err := quadgo.UpdateData("loc123", map[string]interface{}{"some_key": "some_val3"})

Close connection

quadgo.Close()

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoLeaderFound  = errors.New("no leader found")
	ErrEmptyBulkWrite = errors.New("cannot execute empty bulkwrite operation")
)

Functions

func NewBulkWrite added in v0.0.3

func NewBulkWrite() *bulkWrite

func NewInsertOperation added in v0.0.3

func NewInsertOperation(locationID string, lat, lon float64, data map[string]interface{}) *bulkWriteOperation

func NewUpdateDataOperation added in v0.0.3

func NewUpdateDataOperation(locationID string, data map[string]interface{}) *bulkWriteOperation

func NewUpdateLocOperation added in v0.0.3

func NewUpdateLocOperation(locationID string, lat, lon float64) *bulkWriteOperation

func NewUpdateOperation added in v0.0.3

func NewUpdateOperation(locationID string, lat, lon float64, data map[string]interface{}) *bulkWriteOperation

Types

type Location

type Location struct {
	ID        LocationID  `json:"location_id""`
	Latitude  float64     `json:"lat"`
	Longitude float64     `json:"lon"`
	Data      interface{} `json:"data"`
}

type LocationID

type LocationID string

type NeighborResult

type NeighborResult struct {
	Location
	Distance float64 `json:"distance"`
}

type QuadrilleClient

type QuadrilleClient struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(addr string) *QuadrilleClient

func (*QuadrilleClient) Close

func (q *QuadrilleClient) Close()

func (*QuadrilleClient) Delete

func (q *QuadrilleClient) Delete(locationID string) (err error)

func (*QuadrilleClient) ExecuteBulk added in v0.0.3

func (q *QuadrilleClient) ExecuteBulk(bulk *bulkWrite) (err error)

func (*QuadrilleClient) Get

func (q *QuadrilleClient) Get(locationID string) (*Location, error)

func (*QuadrilleClient) Insert

func (q *QuadrilleClient) Insert(locationID string, latitude, longitude float64, data map[string]interface{}) (err error)

func (*QuadrilleClient) Nearby

func (q *QuadrilleClient) Nearby(latitude, longitude float64, radiusInMeters, limit int) (neighbors []NeighborResult, err error)

func (*QuadrilleClient) Update

func (q *QuadrilleClient) Update(locationID string, latitude, longitude float64, data map[string]interface{}) (err error)

func (*QuadrilleClient) UpdateData

func (q *QuadrilleClient) UpdateData(locationID string, data map[string]interface{}) (err error)

func (*QuadrilleClient) UpdateLocation

func (q *QuadrilleClient) UpdateLocation(locationID string, latitude, longitude float64) (err error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL