AMAZON QLDB
Deprecated — Amazon QLDB was retired by AWS in July 2025.
This post remains for historical reference and may contain outdated APIs/links. Consider alternatives for auditability and immutability (e.g., Amazon Aurora with audit logging, DynamoDB + Streams/event sourcing, OpenSearch for tamper‑evident logs, or third‑party ledger databases).
Choose based on your consistency, verification, and operational requirements.
What was Amazon QLDB?
Amazon Quantum Ledger Database (QLDB) was a fully managed ledger database that provided:
- An immutable, append-only journal: All data changes were recorded in a cryptographically verifiable transaction log.
- Verifiable history: You could cryptographically verify that your data hadn’t been tampered with.
- Familiar query surface: It used PartiQL, a SQL-compatible query language, and stored data in Amazon Ion (a superset of JSON).
- Fully managed: No servers to manage, with transactional guarantees and optimistic concurrency control (OCC).
Common use cases included systems of record and audit trails for financial transactions, supply chain events, and other domains requiring data integrity and change history.
Key concepts:
- Journal: The append-only, immutable transaction log.
- Ledger tables and revisions: QLDB maintained a full revision history for each document.
- Verification: Cryptographic digest APIs enabled end-to-end tamper-evidence.
- PartiQL + Ion: Query with SQL-like syntax over semi-structured Ion documents.
- OCC: Optimistic concurrency to manage concurrent updates.
AMAZON QLDB
Code Snippet
sudo yum -u update
sudo yum -y install java-1.8.0-openjdk-dev
sudo yum -y install java-1.8.0-openjdk-devel
udo update-alternatives --config javac
java -version
javac -version
curl -s "https://get.sdkman.io" | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install gradle
gradle -version
Gradle stuff
mkdir lab2cd lab2
gradle init --type java-application
build.gradle
dependencies {
// This dependency is used by the application.
implementation 'com.google.guava:guava:29.0-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.13'
compile group: 'com.amazon.ion', name: 'ion-java', version: '1.6.1'
compile group: 'software.amazon.qldb', name: 'amazon-qldb-driver-java', version: '2.0.0-rc.1'
compile group: 'com.amazonaws', name: 'aws-java-sdk-qldb', version: '1.11.785'
}
mavenCentral()
Application.java
package lab2;
public class App {
public static void main(String[] args) {
System.out.println("Let's play with Ion!");
}
}
The code
package lab2;
import java.util.Iterator;
import com.amazon.ion.*;
import com.amazon.ion.system.*;
import com.amazon.ion.util.*;
import software.amazon.awssdk.services.qldbsession.*;
import software.amazon.awssdk.services.qldbsession.model.OccConflictException;
import software.amazon.qldb.*;
import software.amazon.qldb.exceptions.TransactionAbortedException;
public class SlowUpdate {
public static void main(String[] args) throws Exception {
QldbSessionClientBuilder sessionClientBuilder = QldbSessionClient.builder();
//RetryPolicy retryPolicy = RetryPolicy.builder().maxRetries(3).build();
RetryPolicy retryPolicy = RetryPolicy.none();
QldbDriver driver = QldbDriver.builder()
.ledger("ion-lab")
.sessionClientBuilder(sessionClientBuilder)
.transactionRetryPolicy(retryPolicy)
.build();
try {
driver.execute(txn -> {
Result result = txn.execute("SELECT * FROM myTable");
Iterator<IonValue> iterator = result.iterator();
while (iterator.hasNext()) {
IonValue ionValue = iterator.next();
System.out.println(ionValue);
}
});
} catch (TransactionAbortedException e) {
System.out.println("Transaction aborted: " + e.getMessage());
} catch (OccConflictException e) {
System.out.println("Occ conflict: " + e.getMessage());
}
}
}
References
- Amazon QLDB - https://aws.amazon.com/qldb/
- https://docs.aws.amazon.com/qldb/latest/developerguide/what-is.html
- Amazon QLDB Java Driver - https://javadoc.io/doc/software.amazon.qldb/amazon-qldb-driver-java/latest/index.html
- Amazon ION - http://amzn.github.io/ion-docs/
- Amazon ION Cook book - http://amzn.github.io/ion-docs/guides/cookbook.html
- PartiQL (compatible access to relational, semi-structured, and nested data.) - https://partiql.org/
- http://tinyurl.com/y4kdbt3k
- Ledger capabilitlies of QLDB as a demo
- Emile Baizel (AWS): https://tinyurl.com/y4kdnt3k
- https://tinyurl.com/y64kmpmd
Comments