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 Blob
s (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
loadEnv
ComponentThere 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 directURL
option/flag on resources allows for more direct URL path handling as well.
server.authenticateUser
API
server.authenticateUser
APIIn 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.
harperdb
symlink
harperdb
symlinkUsing 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.
Last updated