Tigris is a modern, scalable backend for building real-time websites and apps.

Tigris Data

Go Report Build Status Contributor Covenant

Getting started

These instructions will get you through setting up Tigris Data locally as Docker containers.

Prerequisites

Running locally

The docker/local directory contains the docker-compose.yaml which describes the configuration of Tigris Data components. You can run Tigris Data in a local environment by executing:

cd docker/local
docker-compose up -d

Connecting using CLI

Install the CLI:

go install github.com/tigrisdata/tigris-cli@latest

Make sure to include the installed binary in your PATH.

Test that Tigris is up and running locally:

export TIGRIS_URL=http://localhost:8081
tigris-cli db list databases

More elaborate example of CLI usage can be found here.

Golang client example can be found here.

Documentation

Roadmap

Community & Support

License

This software is licensed under the Apache 2.0.

Owner
Tigris Data Inc
Building the next generation data infrastructure
Tigris Data Inc
Comments
  • feat: field selection for search

    feat: field selection for search

    • Ability to request certain document fields from search results, by inclusion or exclusion:
    {
        "q": "running",
        "fields": {"title": false, "price": false}
    }
    
    • Fixed a minor bug where facet sizes was not being respected in response. Only the max size was being honored
  • feat: basic prometheus metrics for GRPC calls

    feat: basic prometheus metrics for GRPC calls

    • Expose basic metrics on GRPC calls on /metics in prometheus format.
    • Introduce make run_full, which will also start prometheus and grafana on top of tigris_server and fdb, where the metrics are visible.
  • Local development image build

    Local development image build

    • Add docker file for building monocontainer development image.
    • Used docker compose plugin for local builds
    • Makefile improvements:
      • Only rebuild and restart changed containers
      • Cache tests results (only run changed tests) (all caches, volumes still can be clean and all containers restart by make clean)
  • feat: Initial /search req/resp stub

    feat: Initial /search req/resp stub

    /search interface with stubbed response.

    Request

    {
        "q": "tunnel",
        "search_fields": [
            "first_name",
            "last_name"
        ],
        "filter": {
            "last_name": "Steve"
        },
        "facet": {
            "facet stat": 0
        },
        "sort": [
            {
                "salary": "$asc"
            }
        ],
        "fields": [
            "employment",
            "history"
        ]
    }
    

    Response

    {
        "result": {
            "hits": [
                {
                    "meta": {}
                }
            ],
            "facets": {
                "myField": {
                    "counts": [
                        {
                            "count": 32,
                            "value": "adidas"
                        }
                    ],
                    "stats": {
                        "avg": 40,
                        "count": 50
                    }
                }
            },
            "meta": {
                "found": 1234,
                "page": {
                    "current": 2,
                    "per_page": 10
                }
            }
        }
    }
    
  • fix: installing dependencies on x64_64 macOS

    fix: installing dependencies on x64_64 macOS

    Fix installing dependencies for x86_64 macOS:

    • wget is not available on macOS by default, use curl instead
    • mktemp has different parameters
    • SHA512 is calculated by different command

    The modified version works on a fresh install of macOS.

  • Database creation in parallel

    Database creation in parallel

    Describe the bug For tests, I run several requests to create databases in parallel. Sometimes the error for database creation is nil however database is absent. Sometimes the error does appear.

    To Reproduce

    1. put files in one folder, run go mod tidy
    2. run go test -count=1 ./...

    Expected behavior Expected 3 databases to be present:

    skydancer:~/tigriscli$ tigris list databases
    testthree
    testtwo
    testone
    

    Screenshots Instead, the error appears:

    skydancer:~/tigriscli$ go test -count=1 ./... 
    --- FAIL: TestThree (0.01s)
        tigriscli_test.go:37: recreate db testthree
        tigriscli_test.go:40: 
            	Error Trace:	tigriscli_test.go:40
            	            				tigriscli_test.go:25
            	Error:      	Received unexpected error:
            	            	database already exist
            	Test:       	TestThree
    FAIL
    FAIL	tigriscli	0.054s
    FAIL
    

    and the databases list if not full,

    skydancer:~/tigriscli$ tigris list databases
    testthree
    testtwo
    

    The name of the absent database testone is not the testthree that appeared in the error message.

    Desktop (please complete the following information): Linux skydancer 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

    Additional context

    • cli tigris version v1.0.0-alpha.8
    • tigris container date docker inspect --format '{{ .Created }}' tigrisdata/tigris:latest 2022-05-04T01:53:00.992143876Z
    • github.com/tigrisdata/tigris-client-go v1.0.0-alpha.10
  • Container Resource Limits

    Container Resource Limits

    Describe the bug Containers should have resource limits

    deployment/manifests/base/deployment.yaml deployment/manifests/base/search-deployment.yaml

    Expected behavior Without resource limits, containers can starve other processes

  • feat: Querying on metadata fields

    feat: Querying on metadata fields

    Allowing filtering and sorting by metadata fields created_at and updated_at:

    {
        "q": "",
        "filter": {
            "$and": [
                {
                    "created_at": {
                        "$gt": "2022-08-16T17:29:28.000Z"
                    }
                },
                {
                    "created_at": {
                        "$lt": "2022-08-25T17:29:28.000Z"
                    }
                }
            ]
        }
    }
    
  • feat: Add namespace based authz

    feat: Add namespace based authz

    TODO:

    • [x] setup context for stream server interceptor
    • [ ] make the cache reload when namespace is created
    • [x] add tests.
    • [x] check if there is anything needs to be done for forwarders
    • [x] fix tests
    • [x] fix lint warnings
  • Windows ?

    Windows ?

    https://github.com/tigrisdata/tigris/blob/main/scripts/install_build_deps.sh seems to not support windows.

    is that because foundation db just does not run on windows ?

  • binary large object support

    binary large object support

    Is your feature request related to a problem? Please describe. This feature would allow a user to store data as a BLOB type, or possibly as a pointer to an S3 object store, for example.

    Describe the solution you'd like Example: need to store image and video files (easily 100KB+ to 1GB+ in size). Tigris and FDB are great to store metadata in (and often the metadata is just as important as anything) but it would be highly desirable to store blobs (in PostgreSQL bytea type, for example) as a binary large object. Alternative, it could interesting to integrate something with, for example, MinIO or S3 where Tigris has the metadata and index but the blobs are stored into an S3 location.

    Describe alternatives you've considered MinIO, large table support such as HBase/Accumulo or Apache Iceburg with HDFS or S3 for file storage

    Additional context n/s

  • Expose the size of the collection

    Expose the size of the collection

    Is your feature request related to a problem? Please describe. It's a feature request to let know the collection size

    Describe the solution you'd like

    • Approximate or precise size of the collection in the in a new method totalSize in a /api/v1/databases/{db}/collections/{collection}/ namespace
    • Includes all: indexes, keys, fields, etc.
    • Implementations in the tigrisdb and support it in the client

    Describe alternatives you've considered

    • Just to start a 0 value can be returned. The actual size value can be added later.
    • Give a size value in the ListCollectionsResponse method is not really meant for presenting the size information

    Additional context

Resilient, scalable Brainf*ck, in the spirit of modern systems design

Brainf*ck-as-a-Service A little BF interpreter, inspired by modern systems design trends. How to run it? docker-compose up -d bash hello.sh # Should p

Nov 22, 2022
Go-github-app - Template for building GitHub Apps in Go.

Template for GitHub Apps built with Golang Blog Posts - More Information About This Repo You can find more information about this project/repository a

Dec 25, 2022
Simple Kubernetes real-time dashboard and management.
Simple Kubernetes real-time dashboard and management.

Skooner - Kubernetes Dashboard We are changing our name from k8dash to Skooner! Please bear with us as we update our documentation and codebase to ref

Dec 28, 2022
Nba-simulation - Golang will be simulating nba match and streaming it real time

NBA Simulation golang in-memory To build and run go build ./nbaSimulation To ru

Feb 21, 2022
Reconstruct Open API Specifications from real-time workload traffic seamlessly
Reconstruct Open API Specifications from real-time workload traffic seamlessly

Reconstruct Open API Specifications from real-time workload traffic seamlessly: Capture all API traffic in an existing environment using a service-mes

Jan 1, 2023
A simple go application that uses Youtube Data API V3 to show the real-time stats for a youtube channel such as the subs, views, avg. earnings etc.
A simple go application that uses Youtube Data API V3 to show the real-time stats for a youtube channel such as the subs, views, avg. earnings etc.

Youtube-channel-monitor A simple go application that uses Youtube Data API V3 to show the real-time stats for a youtube channel such as the subs, view

Dec 30, 2021
Flexible HTTP command line stress tester for websites and web services
Flexible HTTP command line stress tester for websites and web services

Pewpew Pewpew is a flexible command line HTTP stress tester. Unlike other stress testers, it can hit multiple targets with multiple configurations, si

Dec 27, 2022
LinkPage is a FOSS self-hosted alternative to link listing websites such as LinkTree and Campsite.bio
LinkPage is a FOSS self-hosted alternative to link listing websites such as LinkTree and Campsite.bio

LinkPage LinkPage is a FOSS self-hosted alternative to link listing websites such as LinkTree and Campsite.bio Features Self hostable and open source

Dec 22, 2022
Taina backend Backend service With Golang

taina-backend Backend service Getting Started Essential steps to get your backend service deployed A helloworld example has been shipped with the temp

Nov 17, 2021
Acropolis Backend is the Go backend for Acropolis - the central management system for Full Stack at Brown
Acropolis Backend is the Go backend for Acropolis - the central management system for Full Stack at Brown

Acropolis Backend Acropolis Backend is the Go backend for Acropolis — the centra

Dec 25, 2021
Go-backend-test - Creating backend stuff & openid connect authentication stuff in golang

Go Backend Coding Practice This is my practice repo to learn about creating back

Feb 5, 2022
Oct 7, 2022
CPU usage percentage is the ratio of the total time the CPU was active, to the elapsed time of the clock on your wall.

Docker-Kubernetes-Container-CPU-Utilization Implementing CPU Load goroutine requires the user to call the goroutine from the main file. go CPULoadCalc

Dec 15, 2021
A Golang based high performance, scalable and distributed workflow framework
A Golang based high performance, scalable and distributed workflow framework

Go-Flow A Golang based high performance, scalable and distributed workflow framework It allows to programmatically author distributed workflow as Dire

Jan 6, 2023
FaaSNet: Scalable and Fast Provisioning of Custom Serverless Container Runtimes at Alibaba Cloud Function Compute (USENIX ATC'21)

FaaSNet FaaSNet is the first system that provides an end-to-end, integrated solution for FaaS-optimized container runtime provisioning. FaaSNet uses l

Jan 2, 2023
Next generation recitation assignment tool for 6.033. Modular, scalable, fast

Next generation recitation assignment tool for 6.033. Modular, scalable, fast

Feb 3, 2022
Grafana Mimir provides horizontally scalable, highly available, multi-tenant, long-term storage for Prometheus.
Grafana Mimir provides horizontally scalable, highly available, multi-tenant, long-term storage for Prometheus.

Grafana Mimir Grafana Mimir is an open source software project that provides a scalable long-term storage for Prometheus. Some of the core strengths o

Jan 3, 2023
k6 is a modern load testing tool for developers and testers in the DevOps era.
k6 is a modern load testing tool for developers and testers in the DevOps era.

k6 is a modern load testing tool, building on our years of experience in the load and performance testing industry. It provides a clean, approachable scripting API, local and cloud execution, and flexible configuration.

Jan 8, 2023