4.5.0

HarperDB 4.5.0

3/13/2025

Blob Storage

4.5 introduces a new Blob storage system, that is designed to efficiently handle large binary objects, with built-in support for streaming large content/media in and out of storage. This provides significantly better performance and functionality for large unstructured data, such as HTML, images, video, and other large files. Components can leverage this functionality through the JavaScript Blob interface, and the new createBlob function. Blobs are fully replicated and integrated. Harper can also coerce strings to Blobs (when dictated by the field type), making it feasible to use blobs for large string data, including with MQTT messaging.

Password Hashing Upgrade

4.5 adds two new password hashing algorithms for better security (to replace md5):sha256: This is a solid general purpose of password hashing, with good security properties and excellent performance. This is the default algorithm in 4.5.argon2id: This provides the highest level of security, and is the recommended algorithm that do not require frequent password verifications. However, it is more CPU intensive, and may not be suitable for environments with a high frequency of password verifications.

Resource and Storage Analytics

4.5 includes numerous new analytics for resources and storage, including page faults, context switches, free space, disk usage, and other metrics.

Default Replication Port

The default port for replication has been changed from 9925 to 9933.

Property Forwarding

Accessing record properties from resource instances should be accessible through standard property access syntax, regardless of whether the property was declared in a schema. Previously only properties declared in a schema were accessible through standard property access syntax. This change allows for more consistent and intuitive access to record properties, regardless of how they were defined. It is still recommended to declare properties in a schema for better performance and documentation.

Storage Reclamation

Harper now includes functionality for automatically trying to clean up and evict non-essential data when storage is running low. When free space drops below 40% (configurable), Harper will start to:

  • Evict older entries from caching tables

  • Evict older audit log entries

  • Remove older rotated logs files These efforts will become progressively more aggressive as free space decreases.

Expanded Sharding Functionality

When sharding is being used, Harper can now honor write requests with residency information that will not be written to the local node's table. Harper also now allows nodes to be declaratively configured as part of a shard.

Certificate Revocation

Certificates can now be revoked by configuring nodes with a list of revoked certificate serial numbers.

Built-in loadEnv Component

There is a new loadEnv component loader that can be used to load environmental variables from a .env in a component.

Cluster Status Information

The cluster_status operation now includes new statistics for replication, including the timestamps of last received transactions, sent transactions, and committed transactions.

Improved URL path parsing

Resources can be defined with nested paths and directly accessed by the exact path without requiring a trailing slash. The id.property syntax for accessing properties in URLs will only be applied to properties that are declared in a schema. This allows for URLs to generally include dots in paths without being interpreted as property access. A new directURLMapping option/flag on resources that allows for more direct URL path handling as well.

server.authenticateUser API

In addition to the server.getUser API that allows for retrieval of users by username, the server.authenticateUser API is now available which will always verify the user by the provided password.

Improved Message Delivery

Performance of delivery of messages has been improved.

HTTP/2

HarperDB now supports HTTP/2 for all API endpoints. This can be enabled with the http2 option in the configuration file.

Using import from 'harperdb' will more consistently work when directly running a component locally.

Transaction Reuse

By default, transactions can now be reused after calling transaction.commit().

GraphQL configuration

The GraphQL query endpoint can be configured to listen on different ports. GraphQL query endpoing is now also disabled by default, to avoid any conflicts.

Glob support for components

Glob file handling for specifying files used by components has been improved for better consistency.

Table.getRecordCount

Table.getRecordCount() is now available to get the number of records in a table.

Last updated