The purpose of this page is to inform the design and development of Akubra by providing an analysis of existing Blob Storage APIs and implementations.
Here we define Pluggable Blob Storage API as a programming interface with the following characteristics:
A Pluggable Blob Storage API MUST:
A Pluggable Blob Storage API MAY:
A Pluggable Blob Storage API MUST NOT:
API |
Language |
Target Application |
Known Implementations |
---|---|---|---|
Java |
General-Purpose |
AKU-FS: FSBlobStore |
|
Java |
Alfresco CMS |
ALF-FS: FileContentStore |
|
Java |
DSpace 2 (Unreleased) |
BIT-FED: FedoraBitStore |
|
Python |
Any Using Django |
||
Java |
Daisy CMS |
||
COM |
MS SQL Server |
||
Java |
Apache JackRabbit |
||
Java |
Apache JackRabbit |
||
Java |
Fedora Repository (2.x to 3.1) |
LLS-FS: GenericFileSystem |
|
Java |
Topaz OTM |
||
Java / C |
General-Purpose |
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
---|---|---|---|---|---|---|---|---|---|---|
AKU-API |
URI |
Internal or External |
Yes |
Yes |
Size |
? |
All |
Optional, JTA |
||
AKU-FS |
file:/// URI |
Internal |
Yes |
Yes |
Size |
None |
All |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
ALF-API |
URL |
Internal or External |
Yes |
Yes |
Size |
None |
All |
Optional, JTA |
||
ALF-FS |
store:// URL |
Internal or External |
Yes |
Yes |
Size |
None |
All |
Optional, JTA |
||
ALF-HTT |
http:// URL |
N/A |
No |
No |
Size |
None |
None |
Optional, JTA |
||
ALF-REP |
URL |
Internal or External |
Yes |
Yes |
Size |
None |
All |
Optional, JTA |
||
ALF-ROU |
URL |
Internal or External |
Yes |
Yes |
Size |
None |
All |
Optional, JTA |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
BIT-API |
Unicode String |
Internal |
Yes |
Yes |
Any (Map) |
None |
None |
No |
||
BIT-FED |
(NCNameChar)* |
Internal |
Yes |
No |
Size |
None |
None |
No |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="7c09ef1a-9596-466f-83ff-11bb9846f362"><ac:plain-text-body><![CDATA[ |
BIT-FS |
([DEV:0-9]){38,40} |
Internal |
Yes |
Yes |
Size |
None |
None |
No |
|
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="236e6a16-fe87-4604-a707-6ac44724458d"><ac:plain-text-body><![CDATA[ |
BIT-HON |
([DEV:0-9]){38,40} |
Internal |
Yes |
Yes |
? |
None |
None |
No |
]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="45d72a16-86b6-4562-8ee5-0fe2996dee44"><ac:plain-text-body><![CDATA[ |
BIT-S3 |
([DEV:0-9]){38,40} |
Internal |
Yes |
Yes |
Size |
None |
None |
No |
|
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="41a0ef9f-9289-4e4f-b67d-12cdf32e9ded"><ac:plain-text-body><![CDATA[ |
BIT-SRB |
([DEV:0-9]){38,40} |
Internal |
Yes |
Yes |
Size |
None |
None |
No |
|
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
DJA-API |
Unicode String |
External |
Yes |
Yes |
Size |
None |
None |
No |
||
DJA-FS |
Unicode String |
External |
Yes |
Yes |
Size |
None |
None |
No |
||
DJA-S3 |
Unicode String |
External |
Yes |
Yes |
Size |
None |
None |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
DSY-API |
Unicode String |
Internal |
Yes |
No |
None |
None |
None |
No |
||
DSY-FS |
Unicode String |
Internal |
Yes |
No |
None |
None |
None |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fd683b37-21ca-4d9d-b5c1-5a2005d5cdd3"><ac:plain-text-body><![CDATA[ |
EBS-API |
byte[] |
Internal |
Yes |
No |
Size |
None |
None |
No |
|
EBS-FS |
GUID or String |
Internal |
Yes |
No |
Size |
None |
None |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
JKB-API |
Unicode String |
Internal |
Yes |
Yes |
None |
None |
None |
No |
||
JKB-DB |
propertyId + index |
Internal |
Yes |
Yes |
None |
None |
None |
No |
||
JKB-FS |
Filesystem Path |
Internal |
Yes |
Yes |
None |
None |
None |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
JKD-API |
Hex String |
Internal |
Yes |
No |
Size |
None |
All |
No |
||
JKD-DB |
SHA-1 Digest of Content |
Internal |
Yes |
No |
Size |
None |
All |
No |
||
JKD-FS |
SHA-1 Digest of Content |
Internal |
Yes |
No |
Size |
None |
All |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
LLS-API |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
LLS-FS |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
LLS-HON |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
LLS-IRD |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
LLS-S3 |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
LLS-SRB1 |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
LLS-SRB2 |
pid or pid + dsId |
External |
Yes |
Yes |
None |
None |
None |
No |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
OTM-API |
Unicode String |
External |
Yes |
No |
None |
None |
None |
Optional, JTA |
||
OTM-FED |
Unicode String |
External |
Yes |
No |
None |
None |
None |
Best-effort, JTA |
||
OTM-FS |
Unicode String |
External |
Yes |
No |
None |
None |
None |
Yes, JTA |
||
API/Impl |
ID Type |
ID Gen |
Write? |
Rewrite? |
Read-Only MD |
Writable MD |
Listing Options |
Transactions |
||
XAM-API |
XUID |
Internal |
Yes |
No 1 |
Last-Modified |
Several Predefined |
All |
No |
||
XAM-CEN |
XUID |
Internal |
Yes |
No |
Last-Modified |
Several Predefined |
All |
No |
||
XAM-HON |
XUID |
Internal |
Yes |
No |
Last-Modified |
Several Predefined |
All |
No |
||
XAM-IAP |
XUID |
Internal |
Yes |
No |
Last-Modified |
Several Predefined |
All |
No |
1 XAM is designed with a fixed-content assumption - data cannot be modified without changing its XUID.
2 In XAM, all metadata fields are either binding or non-binding. Binding metadata cannot change while keeping the same XUID for an XSet, while non-binding metadata can.