Storage / dane aplikacji
Pierwszy zapis i odczyt
Zapisz pomiar pod kluczem room-1, a potem odczytaj tę samą wartość. Zacznij od Memory: nie potrzebujesz bazy danych ani konta. Następnie zobacz, co zmienia SQLite.
To wynik rzeczywistego procesu Storage Host z dostawcą Memory. Strona pokazuje zapis wykonanej próby; sama nie uruchamia hosta ani nie przechowuje Twoich danych.
Jedna droga do danych
Klient wysyła żądania JSONL do osobnego procesu Storage Host. Host ładuje wskazanego dostawcę, otwiera binding i przekazuje mu operację. Binding jest tu otwartą sesją użycia dostawcy, nie kontem użytkownika.
klient Python → Storage Host → dostawca Memory → rekord
W przykładzie bucket measurements grupuje rekordy, key room-1 wskazuje rekord, a payload zawiera celsius: 21.0. To dane przykładu, nie pomiar pobrany z czujnika.
1. Otwórz binding i zapisz
Wykonana próba rozpoczęła się uzgodnieniem ABI junexis.storage.runtime/0.1 oraz otwarciem bindingu Memory. Potem wysłała żądanie:
{
"schemaVersion": "junexis.storage.runtime/0.1",
"requestId": "put",
"action": "invoke",
"bindingId": "example",
"operation": "put",
"effect": "write",
"input": {
"bucket": "measurements",
"key": "room-1",
"payload": {
"celsius": 21.0
}
}
}
operation: put określa operację, effect: write deklarowany rodzaj skutku, a bindingId wybiera wcześniej otwartą sesję dostawcy.
2. Odczytaj ten sam klucz
{
"schemaVersion": "junexis.storage.runtime/0.1",
"requestId": "get",
"action": "invoke",
"bindingId": "example",
"operation": "get",
"effect": "read",
"input": {
"bucket": "measurements",
"key": "room-1"
}
}
Odpowiedź rzeczywistego hosta:
{
"schemaVersion": "junexis.storage.runtime/0.1",
"requestId": "get",
"success": true,
"result": {
"mode": "value",
"value": {
"key": "room-1",
"payload": {
"celsius": 21.0
}
}
}
}
Odczyt result.value.payload.celsius zwrócił 21.0. Identyfikator żądania pozwala powiązać odpowiedź z operacją; sam w sobie nie gwarantuje dokładnie jednego skutku przy dowolnym ponowieniu.
3. Zobacz różnicę po ponownym uruchomieniu
| Dostawca | Zapis i odczyt w pierwszym hoście | Odczyt w nowym hoście |
|---|---|---|
| Memory | 21.0 | Brak rekordu: nowy binding zaczyna pusty magazyn. |
| SQLite | 21.0 | 21.0 z tego samego pliku bazy. |
Obie próby wykonano na istniejących lokalnych kompilacjach Release. Nowy host oznaczał osobny proces, po poprawnym zamknięciu poprzedniego. To nie test utraty zasilania, awarii dysku ani odtwarzania backupu.
Jak powtórzyć próbę?
Potrzebujesz .NET 10, Pythona 3 oraz przygotowanego hosta i kompletnego pakietu dostawcy z zależnościami. Instrukcja nie zakłada publicznego adresu pobierania całego zestawu.
Pobierz klienta first_write.py. W katalogu z tym plikiem wykonaj, podstawiając swoje ścieżki:
python first_write.py --host 'C:\zestaw\Junexis.Storage.Runtime.Host.dll' --provider 'C:\zestaw\memory\runtime\Junexis.Storage.Provider.Memory.dll'
Oczekiwany wynik sprawdzonej próby:
memory: zapisano room-1 = 21.0
memory: odczytano room-1 = 21.0
memory: nowy host i binding sa puste
Ten sam klient z SQLite
Użyj kompletnego pakietu SQLite z biblioteką natywną odpowiednią dla systemu. Wybierz nowy plik bazy w swoim prywatnym katalogu testowym; nie używaj istniejącej bazy aplikacji.
python first_write.py --host 'C:\zestaw\Junexis.Storage.Runtime.Host.dll' --provider 'C:\zestaw\sqlite\runtime\Junexis.Storage.Provider.Sqlite.dll' --kind sqlite --database '.\pierwszy-zapis.db'
sqlite: zapisano room-1 = 21.0
sqlite: odczytano room-1 = 21.0
sqlite: nowy host odczytal 21.0 z tego samego pliku
Klient kończy oba procesy hosta. Plik SQLite pozostaje w wybranym katalogu. Przykład zapisuje rekord measurements/room-1; nie jest narzędziem do zarządzania produkcyjną bazą.
Pełny zapis próby Memory w JSON · Porównaj dostawców · Poznaj ograniczenia.