monday.storage
Infrastruktura monday apps obejmuje trwały magazyn typu klucz-wartość. Deweloperzy mogą go używać do przechowywania danych bez tworzenia własnego zaplecza i utrzymywania własnej bazy danych. Umożliwia przechowywanie danych aplikacji zarówno na poziomie instancji, jak i globalnie. Do obsługi magazynu możesz użyć metody SDK monday.storage.
Poniższe limity dotyczą metod dostępnych zarówno na poziomie instancji, jak i globalnie:
-
Limit długości klucza: 256
-
Limit pamięci na klucz: 6 MB
Metody
Wszystkie metody zwracają obiekt Promise, który zostanie rozstrzygnięty z odpowiedzią Storage API.
| Metoda | Opis |
|---|---|
| monday.storage.instance.getItem(key, options) | Zwraca wartość zapisaną w bazie danych pod kluczem key dla konkretnej instancji |
| monday.storage.instance.setItem(key, value, options) | Zapisuje wartość value w bazie danych pod kluczem key dla konkretnej instancji |
| monday.storage.instance.deleteItem(key, options) | Usuwa wartość zapisaną w bazie danych pod kluczem key dla konkretnej instancji |
| monday.storage.getItem(key, options) | Zwraca wartość zapisaną w bazie danych pod kluczem key |
| monday.storage.setItem(key, value, options) | Zapisuje wartość value w bazie danych pod kluczem key |
| monday.storage.deleteItem(key, options) | Usuwa wartość zapisaną w bazie danych pod kluczem key |
Poziom instancji
W przypadku magazynu na poziomie instancji każda instancja aplikacji (czyli pojedynczy widok tablicy lub widżet pulpitu) ma własny magazyn. Aplikacje nie mogą współdzielić magazynu między kontami ani między aplikacjami zainstalowanymi w tej samej lokalizacji. Magazyn na poziomie instancji nie działa dla wszystkich typów funkcji aplikacji - jest dostępny tylko dla tych, które mają instancje.
Magazyn jest resetowany przy każdej nowej wersji głównej, ponieważ każda wersja ma własne instancje, a zarządzanie magazynem odbywa się po stronie serwera. Magazyn na poziomie instancji jest też odizolowany na podstawie wartości accountId, app i instance.
Wersjonowanie
Może się zdarzyć, że kilku użytkowników będzie pracować na tej samej instancji aplikacji i jednocześnie, bez synchronizacji, zapisywać dane pod tym samym kluczem. Jeśli zapisujesz pod tym kluczem złożoną strukturę danych, na przykład JSON, takie operacje mogą nadpisywać się nawzajem.
Metody getItem i setItem zwracają identyfikator wersji, który pozwala określić, jaka wartość jest obecnie zapisana pod danym kluczem. Za każdym razem, gdy zapis zmienia wartość, identyfikator wersji w bazie danych również się zmienia. Identyfikator informuje, czy wartość została zmieniona w innym miejscu, i zapobiega jej nadpisaniu.
Przykłady
Poniższe przykłady pokazują, jak używać metody monday.storage do obsługi bazy danych na poziomie instancji.
Wersjonowanie
Żądanie
monday.storage.instance.getItem('serialKey').then(res => {
const { value, version } = res.data;
sleep(10000); // someone may overwrite serialKey during this time
monday.storage.instance.setItem('serialKey', { previous_version: version }).then(res => {
console.log(res);
}
});
Odpowiedź
{
"method": "storage",
"data": {
"success": false,
"error": "Version mismatch: key myKeyName was updated from another context and versioning is enabled"
},
"requestId": "123456"
}
Ustawianie nowej wartości
Żądanie
monday.storage.instance.setItem('mykey', 'Lorem Ipsum').then(res => {
console.log(res);
});
// => { "success": true }
Odpowiedź
{
"method" : "storage",
"data" : {
"success" : true,
"version" : "465cc"
},
"requestId" : "123456"
}
Pobieranie wartości
Żądanie
monday.storage.instance.getItem('mykey').then(res => {
console.log(res.data.value);
});
// => 'Lorem Ipsum'
Odpowiedź
{
"method" : "storage",
"data" : {
"value" : "Lorem Ipsum",
"version" : "465cc",
"success" : true
},
"requestId" : "123456"
}
Usuwanie elementu
Żądanie
monday.storage.instance.deleteItem('mykey').then(res => {
console.log(res.data);
}
Odpowiedź
{
"method" : "storage",
"data" : {
"value" : null,
"success" : true
},
"requestId" : "123456"
}
Poziom globalny
W przypadku magazynu globalnego każda aplikacja ma własny magazyn, który jest współdzielony we wszystkich jej użyciach. W przeciwieństwie do metod dostępnych na poziomie instancji magazyn nie jest powiązany z konkretną instancją. Nie jest resetowany przy zmianie wersji głównej, ponieważ jest współdzielony w całej aplikacji, a nie tylko w jednej instancji.
To deweloperzy, a nie monday, zarządzają sposobem przechowywania elementów po stronie klienta. W magazynie na poziomie instancji dodajemy instancję jako dodatkową warstwę izolacji, ale magazyn globalny jej nie ma. Jest on odizolowany na podstawie wartości accountId i app, dlatego dane z jednego konta nie są dostępne z innych kont.
Wersjonowanie
Podobnie jak magazyn na poziomie instancji, magazyn globalny również obsługuje wersje.
Metody getItem i setItem zwracają identyfikator wersji, który pozwala określić, jaka wartość jest obecnie zapisana pod danym kluczem. Za każdym razem, gdy zapis zmienia wartość, identyfikator wersji w bazie danych również się zmienia. Identyfikator informuje, czy wartość została zmieniona w innym miejscu, i zapobiega jej nadpisaniu.
Przykłady
Poniższe przykłady pokazują, jak używać metody monday.storage do globalnej obsługi bazy danych.
Wersjonowanie
Żądanie
monday.storage.getItem('serialKey').then(res => {
const { value, version } = res.data;
sleep(10000); // someone may overwrite serialKey during this time
monday.storage.setItem('serialKey', { previous_version: version }).then(res => {
console.log(res);
}
});
Ustawianie nowej wartości
Żądanie
monday.storage.setItem('mykey', 'Lorem Ipsum').then(res => {
console.log(res);
});
Pobieranie wartości
Żądanie
monday.storage.getItem('mykey').then(res => {
console.log(res.data.value);
});
Wyszukiwanie wartości
Żądanie
monday.storage.searchItem('mykey').then(res => {
console.log(res.data);
}
Usuwanie elementu
Żądanie
monday.storage.deleteItem('mykey').then(res => {
console.log(res.data);
}
📘 Dołącz do społeczności deweloperów!
Stworzyliśmy społeczność dla deweloperów. Możesz przeszukiwać wcześniejsze dyskusje, aby znaleźć rozwiązania, zadawać pytania, poznawać nowe funkcje i aktualizacje, a także uczyć się wskazówek i trików od innych deweloperów. Dołącz do nas! 😎