Ax.Fw.Storage
14.4.240
dotnet add package Ax.Fw.Storage --version 14.4.240
NuGet\Install-Package Ax.Fw.Storage -Version 14.4.240
<PackageReference Include="Ax.Fw.Storage" Version="14.4.240" />
paket add Ax.Fw.Storage --version 14.4.240
#r "nuget: Ax.Fw.Storage, 14.4.240"
// Install Ax.Fw.Storage as a Cake Addin #addin nuget:?package=Ax.Fw.Storage&version=14.4.240 // Install Ax.Fw.Storage as a Cake Tool #tool nuget:?package=Ax.Fw.Storage&version=14.4.240
Ax.Fw.Storage
Simple document database; based on SQLite
Why?
I just wanted to create an instance of class and be able to write to database, read from database, enumerate elements in database by key without thinking about "this database's BSON don't support ImmutableDictionary, meh", "that database doesn't support numeric keys, meh", "ah, I can't search for values of integer column using unsigned integer variable, meh" and so on. Why not "key-value" storage? I also wanted to filter my objects by last changed
time. That's it. This document storage engine is not as fast as more "strongly-typed" databases (I think it's 1.1 - 1.5x slower in some scenarios), but it is reliable as any SQLite database.
Usage example:
// we need CancellationToken
var ct = default(CancellationToken);
// path to database file
var dbFile = "/home/user/data.db"
try
{
// create database or open existing
using var storage = new SqliteDocumentStorage(dbFile);
// create document; pair 'namespace - key' is unique; any json serializable data can be stored
var doc = await storage.WriteDocumentAsync(_namespace: "default", _key: "test-key", _data: "test-data-0", ct);
// retrieve data
var readDoc = await storage.ReadDocumentAsync(_namespace: "default", _key: "test-key", ct);
Assert.Equal("test-data-0", readDoc?.Data.ToObject<string>());
// there are also 'simple' documents;
// namespace of simple documents is automatically determined by data type or by `SimpleDocumentAttribute`
var simpleDoc = await storage.WriteSimpleDocumentAsync(_entryId: 123, _data: "test_data", ct);
var readSimpleDoc = await storage.ReadSimpleDocumentAsync<string>(_entryId: 123, ct);
Assert.Equal("test_data", readSimpleDoc?.Data);
// you also can attach in-memory cache to document storage
// cache makes read operations significantly faster
using var cachedStorage = storage.WithCache(_maxValuesCached: 1000, _cacheTtl: TimeSpan.FromSeconds(60));
// you also can attach retention rules to document storage
// documents older than certain age will be automatically deleted
using var storageWithRules = storage
.WithRetentionRules(TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromMinutes(10));
}
finally
{
new FileInfo(dbFile).TryDelete();
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- AWSSDK.S3 (>= 3.7.405)
- Ax.Fw (>= 14.4.240)
- Microsoft.Data.Sqlite (>= 8.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
14.4.240 | 125 | 11/2/2024 |
14.4.239 | 145 | 10/18/2024 |
14.4.237 | 90 | 9/19/2024 |
14.4.236 | 143 | 8/11/2024 |
14.3.235 | 109 | 8/10/2024 |
14.3.234 | 69 | 8/5/2024 |
14.3.233 | 74 | 7/29/2024 |
14.3.232 | 91 | 7/23/2024 |
14.3.231 | 89 | 7/22/2024 |
14.3.230 | 104 | 7/17/2024 |
14.3.229 | 78 | 7/17/2024 |
14.3.228 | 89 | 7/11/2024 |
14.3.227 | 93 | 7/10/2024 |
14.3.226 | 119 | 7/3/2024 |
14.3.225 | 114 | 6/14/2024 |
14.3.224 | 83 | 6/7/2024 |
14.3.223 | 103 | 6/6/2024 |
14.3.222 | 111 | 5/17/2024 |
14.3.221 | 137 | 4/12/2024 |
14.2.219 | 105 | 4/11/2024 |
14.2.218 | 102 | 4/10/2024 |
14.2.217 | 196 | 3/29/2024 |
14.2.216 | 117 | 3/27/2024 |
14.2.215 | 113 | 3/22/2024 |
14.1.212 | 119 | 3/11/2024 |
14.1.211 | 105 | 3/11/2024 |
14.1.210 | 109 | 3/6/2024 |
14.1.208 | 115 | 3/6/2024 |
14.1.206 | 121 | 3/2/2024 |
14.1.205 | 122 | 3/1/2024 |
14.0.204 | 123 | 2/19/2024 |
14.0.203 | 108 | 2/16/2024 |
14.0.201 | 117 | 2/15/2024 |
13.0.200 | 131 | 2/10/2024 |
13.0.199 | 111 | 2/10/2024 |
13.0.198 | 108 | 2/10/2024 |
13.0.197 | 289 | 12/10/2023 |
13.0.196 | 125 | 12/10/2023 |
13.0.195 | 124 | 12/9/2023 |
13.0.194 | 107 | 12/6/2023 |
13.0.192 | 122 | 12/5/2023 |
13.0.191 | 149 | 11/26/2023 |
13.0.189 | 131 | 11/24/2023 |
13.0.186 | 127 | 11/23/2023 |
13.0.185 | 131 | 11/22/2023 |
13.0.182 | 129 | 11/18/2023 |
13.0.181 | 151 | 11/14/2023 |
13.0.180 | 141 | 11/12/2023 |
13.0.179 | 122 | 11/10/2023 |
12.1.178 | 151 | 10/25/2023 |
12.1.177 | 143 | 10/24/2023 |
12.1.176 | 141 | 10/21/2023 |
12.1.175 | 143 | 10/21/2023 |
12.1.173 | 136 | 10/16/2023 |
12.1.172 | 156 | 10/15/2023 |
12.1.171 | 139 | 10/15/2023 |
12.1.170 | 130 | 10/15/2023 |
12.1.168 | 156 | 10/15/2023 |
12.1.167 | 116 | 10/14/2023 |
12.1.166 | 175 | 9/7/2023 |
12.1.165 | 199 | 8/28/2023 |
12.1.164 | 224 | 8/15/2023 |
12.1.163 | 191 | 8/14/2023 |
12.1.162 | 166 | 8/14/2023 |
12.1.161 | 207 | 6/20/2023 |
12.1.160 | 206 | 6/10/2023 |
12.1.158 | 171 | 5/31/2023 |
12.1.157 | 169 | 5/22/2023 |
12.1.7 | 165 | 5/21/2023 |
12.1.0 | 163 | 5/19/2023 |
12.0.21 | 172 | 5/18/2023 |
12.0.20 | 152 | 5/18/2023 |
12.0.19 | 173 | 5/10/2023 |
12.0.18 | 155 | 5/4/2023 |
12.0.17 | 180 | 5/3/2023 |
12.0.16 | 198 | 4/30/2023 |
12.0.15 | 188 | 4/30/2023 |
12.0.13 | 194 | 4/27/2023 |
12.0.12 | 202 | 4/27/2023 |
12.0.10 | 264 | 4/15/2023 |
12.0.9 | 249 | 4/6/2023 |
12.0.8 | 251 | 3/27/2023 |
12.0.7 | 243 | 3/27/2023 |
12.0.3 | 240 | 3/22/2023 |
12.0.2 | 241 | 3/22/2023 |
12.0.1 | 274 | 3/1/2023 |
12.0.0 | 306 | 2/11/2023 |
11.1.10 | 290 | 2/11/2023 |
11.1.9 | 294 | 2/10/2023 |
11.1.8 | 293 | 2/6/2023 |
11.1.7 | 291 | 2/5/2023 |
11.1.6 | 303 | 2/4/2023 |
11.1.5 | 298 | 2/4/2023 |
11.1.4 | 336 | 12/30/2022 |
11.1.3 | 371 | 12/26/2022 |
11.1.2 | 316 | 12/26/2022 |
11.1.1 | 330 | 12/25/2022 |
11.0.0 | 323 | 12/24/2022 |
1.0.0 | 351 | 12/24/2022 |