v1.1.0
Immudb 1.1.0 highlights
This release of immudb comes with many new features and improvements. The most important ones are highlighted below.
Follower replication
Immudb follower replication is now stable. This enables configuring a cluster of immudb nodes where follower replicas replicate transactions committed on the leader node.
S3 storage backend
S3 storage backend is now marked stable. With the S3 backend, immudb automatically uploads the data into an S3-compatible server reducing the amount of data stored locally.
Much improved SQL backend
Following new features were added to the SQL backend:
- Multi-column indexes
- Multi-column primary keys
- Unique indexes
- Support for negative values in INTEGER columns and calculations using negative values
- Huge improvements of query optimization with indexes
- AUTO_INCREMENT primary key
Improved docker images
New release comes with changes to how our docker images are built.
The main codenotary/immudb
image is now built using a scratch
base to reduce the image size and increase its security.
There are two more versions of the immudb image - one based on debian
(codenotary/immudb:1.1.0-bulllseye-small
) and one based on almalinux
(codenotary/immudb:1.1.0-almalinux-8-minimal
).
Important notes
Breaking changes on the SQL layer
This release is using completely new format for storing SQL data. This change was necessary to support new features but it is not compatible with the old format.
After upgrading to immudb 1.1.0, the old data will not be available through the SQL interface even though immudb still contains the low-level KV representation of those entries. If you need to migrate the old data to the new format, please contact us on our discord channel.
Go version support
Starting with the next release our official builds and docker images will be compiled and tested using go 1.17. In order to support older systems where go 1.17 is not easily available, we are providing statically-linked binaries. We also ensure that binaries can be manually compiled with older go versions down to 1.13 (excluding tests).
Changelog
[v1.1.0] - 2021-09-22
Bug Fixes
- Minor updates to build/RELEASING.md
- Update Dockerfile.alma maintainer field
- CI: Fix building and releasing almalinux images
- Dockerfile: Fix compiling version information in docker images
- Dockerfile.rndpass: Fix building rndpass docker image
- embedded/sql: suffix endKey when scan over all entries
- embedded/sql: in-mem catalog rollback and syncing fixes
- embedded/sql: exclude length from maxKey
- embedded/sql: return error when joint table doest not exist
- embedded/sql: support edge case of table with just an auto-increment column
- embedded/sql: limit auto-increment to single-column pks
- embedded/sql: take into account table aliasing during range calculations
- embedded/sql: improve error handling and parameters validation
- embedded/sql: adjust selector ranges calculation
- embedded/sql: consider boolean type in maxKeyVal
- embedded/sql: set type any to nil parameters
- embedded/sql: fix table aliasing with implicit selectors
- embedded/sql: enforce ordering by grouping column
- embedded/store: fix constraint condition
- embedded/store: error handling when setting offset fails
- pkg: improve signature verification during audit
- pkg/stdlib: fix driver connection releasing
Changes
- Update RELEASING.md with documentation step.
- remove wip warning for fully implemented features
- Add documentation badge to README.md
- Add documentation link at the beginning of README.md
- Add documentation link to command line help outputs
- Update codenotary maintainer info
- Remove experimental S3 warning from README
- CI: Build almalinux-based immudb image
- CI: Explicitly require bash in gh action building docker images
- CI: Use buildkit when building docker images
- Dockerfile: Build a debian-based image for immudb next to the scratch one
- Dockerfile: Use scratch as a base for immudb image
- Dockerfile: Remove unused IMMUDB_DBNAME env var
- Dockerfile: Update base docker images
- Makefile: More explicit webconsole version
- Makefile: Add darwin/amd64 target
- build.md: Add info about removing webconsole/dist folder
- cmd/immuadmin: remove replication flag shortcut
- cmd/immuadmin: parse all db flags when preparing settings
- cmd/immuadmin: improve flag description and rollback args spec
- cmd/immuclient: display number of updated rows as result of sql exec
- cmd/immudb: use common replication prefix
- docker: Update generation of docker tags
- embedded: leverage kv constraint to enforce upsert over auto-incremental pk requires row to already exist
- embedded/multierr: enhace multi error implementation
- embedded/sql: fix primary key supported types error message
- embedded/sql: get rid of limited joint implementation
- embedded/sql: ignore null values when encoding row
- embedded/sql: include constraint only when insert occurs without auto_incremental pk
- embedded/sql: wip scan optimizations based on query condition and sorting
- embedded/sql: partial progress on selector range calculation
- embedded/sql: partial progress on selector range calculation
- embedded/sql: expose primary key index id
- embedded/sql: leverage endKey to optimize indexing scanning
- embedded/sql: minor code refactoring
- embedded/sql: mark catalog as mutated when using auto incremental pk
- embedded/sql: fix max key length validation
- embedded/sql: catalog loading requires up to date data store indexing
- embedded/sql: optional parenthesis when specifying single-column index
- embedded/sql: disable TIMESTAMP data-type
- embedded/sql: move index selection closer to data source in query statements
- embedded/sql: optimize integer key mapping
- embedded/sql: use plain big-endian encoding for integer values
- embedded/sql: include support for int64 parameters
- embedded/sql: minor refactoring to simplify code
- embedded/sql: minor code simplification
- embedded/sql: use int64 as value holder for INTEGER type
- embedded/sql: add further validations when encoding values as keys
- embedded/sql: move index spec closer to ds
- embedded/sql: reserve byte to support multi-ordered indexes
- embedded/sql: index prefix function
- embedded/sql: use Cols as a replacement for ColsByID
- embedded/sql: changed identifiers length in catalog
- embedded/sql: validate non-null pk when decoding index entry
- embedded/sql: limit upsert to tables without secondary indexes
- embedded/sql: remove join constraints
- embedded/sql: convert unmapIndexedRow into unmapRow with optional indexed value
- embedded/tbtree: typo in log message
- embedded/tbtree: compaction doesn't need snapshots to be closed
- embedded/tbtree: return kv copies
- embedded/tbtree: adjust seekKey based on prefix even when a value is set
- embedded/tools: update sql stress tool with exec summary
- pkg/api: changed db identifiers type
- pkg/api: use fresh id in proto message
- pkg/api: use a map for holding latest auto-incremental pks
- pkg/api: use int64 as value holder for INTEGER type
- pkg/api: use follower naming for replication credentials
- pkg/api: include updated rows and last inserted pks in sql exec result
- pkg/api: delete deprecated clean operation
- pkg/client: changed db identifiers type
- pkg/client: move unit testing to integration package to avoid circular references
- pkg/database: warn about data migration needed
- pkg/database: minor refactoring coding conventions
- pkg/database: remove active replication options from database
- pkg/database: create sql db instance if not present
- pkg/database: minor adjustments based on multi-column indexing
- pkg/database: update integration to exec summary
- pkg/database: display as unique if there is a single-column index
- pkg/database: include updated rows and last inserted pks in sql exec result
- pkg/database: warn about data migration needed
- pkg/database: minor renaming after rebase
- pkg/pgsql/server: adds pgsql server maxMsgSize 32MB limit
- pkg/pgsql/server: add a guard on payload message len
- pkg/replication: handle disconnection only within a single thread
- pkg/replication: use new context for each client connection
- pkg/replication: use info log level for network failures
- pkg/server: followers management
- pkg/server: validate replication settings
- pkg/server: nil tlsConfig on default options
- pkg/server: change max concurrency per database to 30
- pkg/server: changed default db file size and make it customizable at db creation time
- pkg/server: use replica wording
- pkg/stdLib: implementing golang standard sql interfaces
- pkg/stdlib: remove pinger interface implementation and increase code coverage
- pkg/stdlib: increase code coverage and fix blob results scan
- pkg/stdlib: immuclient options identifier(uri) is used to retrieve cached connections
- pkg/stdlib: simplified and hardened uri handling
Features
- Dockerfile for almalinux based image
- cmd/immuadmin: add replication flags
- cmd/immuadmin: add flag to exclude commit time
- embedded/multierr: implement stardard error Is & As methods
- embedded/sql: wip unique multi-column indexes
- embedded/sql: inner join with joint table and subqueries
- embedded/sql: towards more powerful joins
- embedded/sql: value expressions in row specs
- embedded/sql: switch to signed INTEGER
- embedded/sql: exec summary containing number of updated/inserted rows and last inserted pk per table
- embedded/sql: max length on variable sized types as requirement for indexing
- embedded/sql: multi-column primary keys
- embedded/sql: use explicitelly specified index as preffered one
- embedded/sql: expose scanSpecs when resolving a query
- embedded/sql: wip unique multi-column indexing
- embedded/sql: support index spec in joins
- embedded/sql: wip auto-incremental integer primary keys
- embedded/store: parameterized commit time
- embedded/store: leverage endKey from tbtree key reader
- embedded/tbtree: include endKey to instruct scan termination
- pkg/database: row verification with composite primary keys
- pkg/follower: follower replication
- pkg/pgsql/server: add support for flush message
- pkg/replication: initial active replication capabilities
- pkg/server: upgrade db settings to include or exclude commit time
- pkg/server: initial support for active replication of user created databases
- pkg/server: systemdb and defaultdb follower replication
Downloads
Docker image
https://hub.docker.com/r/codenotary/immudb
Immudb Binaries
File | SHA256 |
---|---|
immudb-v1.1.0-darwin-amd64 | 8582905f0eeaec452c43f2431235a1a47c4d331e28a1bc99dd391add355ab262 |
immudb-v1.1.0-darwin-arm64 | c6bb78b4e1655b1251e3830e3b2ca8e21ff4d3a4ae794e42853fa91c07a323c9 |
immudb-v1.1.0-freebsd-amd64 | a375e7c7201a952ba6b5b94f0c85f46a31ea2a58192284fbb81f625a3b47a9c7 |
immudb-v1.1.0-linux-amd64 | bcf9de31caae18bdede62a3d806eca3c510abca5f97f7a21ffde42862686bfc6 |
immudb-v1.1.0-linux-amd64-static | b5c0d1ce21941e90feb1e28653c9626a1c459b5a4e001b8f9354bf8a0b5ecb5d |
immudb-v1.1.0-linux-arm64 | 54aeed6aff93d5a35bac8ca9f2976832424e36e8fbe4d185338f0f12f8b7c8a5 |
immudb-v1.1.0-linux-s390x | 418a32efb81662c91c19a6a780c3e801525a033b7a89b280d17efdcf711842f1 |
immudb-v1.1.0-windows-amd64.exe | 85e760c7fff22687a43447f51dd6e7e33dd7a5d84187fdca4dd00edfb0cbfba9 |
Immuclient Binaries
File | SHA256 |
---|---|
immuclient-v1.1.0-darwin-amd64 | 31a84ac0299c35ddf5d32e77a68c2787c2329c0292a1f7896e3458a7603d51a1 |
immuclient-v1.1.0-darwin-arm64 | 703e9bc38b1fe697ddf1c191a3d9a5fae00a328db3cc87d49a354a8845f4d7c4 |
immuclient-v1.1.0-freebsd-amd64 | db8b72f6f249f8fac5d02ac8be9d8341e9c9bd66393393d9399c0cd456c5d76f |
immuclient-v1.1.0-linux-amd64 | ec3080c80eb1322166e2978e3d41018691c136b05045c45761a19cd33ef41153 |
immuclient-v1.1.0-linux-amd64-static | e033e7a67c2b084bd66fd148bc34f3910aa33a4bca35b6022b8adfd8553965d4 |
immuclient-v1.1.0-linux-arm64 | f6e4bf7eb6b016d52915ff1c1005f0b5cfe3eb5592719bde88f74f988c395eba |
immuclient-v1.1.0-linux-s390x | 094b42098d96b85f177c8f67eab4a1acb202b7d2d89639a9dce8e88e166b83d8 |
immuclient-v1.1.0-windows-amd64.exe | 1b229a02684649d4a958ce35deefea17cfa4dd409cb4e0541f20022db065a54e |
Immuadmin Binaries
File | SHA256 |
---|---|
immuadmin-v1.1.0-darwin-amd64 | 8c4f54d668566b805ee04cc6b7615c871aa48c037cebc8fd6a29c6481e803070 |
immuadmin-v1.1.0-darwin-arm64 | 7ddc6c17e7bae695181a83b6bd87c99d8074f56c03092a12d3c3ecefc95186b2 |
immuadmin-v1.1.0-freebsd-amd64 | b23ed395d5c667c3f12db663593f319f35eca78ae8675eaaad0118c23107487a |
immuadmin-v1.1.0-linux-amd64 | 68023cda445139daf3ace0be4c31453f235b969fc748efc2e9dfda03e1fe592a |
immuadmin-v1.1.0-linux-amd64-static | 20c53b1e394b056f643abcdbeec1b6ca2d62cb77151ac902abb2a47aa3d8d07f |
immuadmin-v1.1.0-linux-arm64 | be0e22cdc9ba4cf6315959161efb73df733b5ba8ad940bcab5cee0c5ce837003 |
immuadmin-v1.1.0-linux-s390x | b70a0d1789a579dc7b241cdea4f44a1d9fa469a019cc330c9c696e9b28dc53d9 |
immuadmin-v1.1.0-windows-amd64.exe | f021e01f0c9af7481b637e51b320fda89f254e7fe27d9973bc337375eef6afd1 |