inklabs / rangedb Goto Github PK
View Code? Open in Web Editor NEWRangeDB - An event store database in Go
License: BSD 3-Clause "New" or "Revised" License
RangeDB - An event store database in Go
License: BSD 3-Clause "New" or "Revised" License
It appears that only the latest
tag is being pushed to Docker Hub. Best practice in production environments is to pin the version of the image instead of using latest.
I will put a list of all the things I noticed on the Postgres store and that should be changed. I will then start working on that ASAP, create a branch and link a PR to this issue.
Add proper error handling
Create indexes and constraints for the table
Reduce the number of simultaneous connections
Handle transactions
Recently started building images locally and occasionally have a test fail
Seems to most freq happen if I remove image/containers and do a fresh build.
Test:
--- FAIL: Test_AggregateType (0.01s)
--- FAIL: Test_AggregateType/renders_events_by_aggregate_type,_one_record_per_page,_1st_page (0.00s)
Output:
Error Trace: ui_test.go:114
Error: "\n <!doctype html>\n <html class=\"no-js\" lang=\"en\">\n <head>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n <title>thing - RangeDB</title>\n <link rel=\"icon\" href=\"/static/img/favicon.ico\"/>\n <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/static/img/favicon.ico\"/>\n <link rel=\"stylesheet\" href=\"/static/css/foundation-6.5.3.min.css\">\n <link rel=\"stylesheet\" href=\"/static/css/foundation-icons.css\">\n <link rel=\"stylesheet\" href=\"/static/css/site.css\">\n \n </head>\n <body>\n <div id=\"header\" class=\"top-bar\">\n <div class=\"top-bar-left\">\n <div class=\"top-bar-title\">\n <a href=\"/\">\n <img src=\"/static/img/rangedb-logo-white-30x30.png\" width=\"30\" height=\"30\" alt=\"RangeDB Logo\"/>\n <span>RangeDB</span>\n </a>\n </div>\n </div>\n <div class=\"top-bar-right\">\n <ul class=\"menu\">\n <li><a href=\"/\">Home</a></li>\n <li><a href=\"/aggregate-types\">Aggregates</a></li>\n </ul>\n </div>\n </div>\n\n <div id=\"content\">\n \n <div class=\"grid-container\">\n <div class=\"grid-x grid-padding-x\">\n <div class=\"cell medium-12 medium-order-1\">\n <h3>\n Aggregate Type: thing\n <small>(1)</small>\n </h3>\n \n<table class=\"records\">\n <thead>\n <tr>\n <th>Event #</th>\n <th>Event Type</th>\n <th>Aggregate ID</th>\n <th>Insert Date</th>\n <th>Data</th>\n </tr>\n </thead>\n <tbody>\n\n <tr>\n <td>0</td>\n <td>ThingWasDone</td>\n <td><a href=\"/e/thing/f6b6f8ed682c4b5180f625e53b3c4bac\">f6b6f8ed682c4b5180f625e53b3c4bac</a></td>\n <td class=\"date\">Mar 28, 2021 02:25:01 UTC</td>\n <td>{"id":"f6b6f8ed682c4b5180f625e53b3c4bac","number":0}</td>\n </tr>\n \n </tbody>\n</table>\n\n \n<nav aria-label=\"Pagination\">\n <ul class=\"pagination text-center\">\n \n <li class=\"pagination-previous disabled\">Previous</li>\n \n \n <li class=\"pagination-next disabled\">Next</li>\n \n </ul>\n</nav>\n\n </div>\n </div>\n </div>\n\n </div>\n\n <div id=\"footer\" class=\"grid-container\">\n <div class=\"grid-x grid-padding-x align-center\">\n <div class=\"cell text-center\">\n <small>\n RangeDB 0.8.1-dev\n | <a href=\"https://github.com/inklabs/rangedb\">Documentation</a>\n | <a href=\"/api/list-aggregate-types\">API</a>\n </small>\n </div>\n </div>\n </div>\n\n </body>\n </html>\n\n\n\n\n" does not contain "/e/thing?itemsPerPage=1&page=2"
Test: Test_AggregateType/renders_events_by_aggregate_type,_one_record_per_page,_1st_page
Take advantage of new //go:embed
directive for static assets.
Add support for AWS DynamoDB as an encryption keystore.
Delete currently only performs a soft delete:
UPDATE vault SET DeletedAtTimestamp = $1 WHERE SubjectID = $2
This should set EncryptionKey
to empty string.
Replace shortuuid.SetRand(100)
in tests with a UUID generator. This will help with flaky tests that are non-deterministic due to goroutines executing out of order.
Using the term emit()
is misleading as events are not actually emitted, only staged for release. Replace with raise()
to better indicate the actual behavior.
https://github.com/inklabs/rangedb/search?q=emit&unscoped_q=emit
Add a decorating rangedb.Store
that encrypts/decrypts events automatically.
As a RangeDB client, I want to retrieve events via gRPC using protocol buffers; so that my services can efficiently process events.
Implementation Details:
Mirror the same functionality as the HTTP API examples here:
https://github.com/inklabs/rangedb/tree/master/examples
Todo
RangeDB engines that store global sequence numbers as a monotonic sequence (with potential gaps or reused global sequence numbers) cause problems with pagination. Traditional pagination relied on a consistently incrementing global sequence number.
This has been resolved for the basic UI in 94f5f56: http://0.0.0.0:8080/a/thing
This potentially needs to be resolved in the websocket live stream of events: http://0.0.0.0:8080/a/thing/live
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.