Persistence
Intrasheets Server provides an abstract layer for data persistence through event-based methods. Developers can use the create, load, change, destroy, and replace events to connect to any database, manage data storage, add version control, and handle high-demand queues, ensuring complete control over data management.
Settings
Section titled “Settings”Those are the available events for data persistence.
| Method | Description |
|---|---|
load | Loads the spreadsheet configuration by its GUID. |
create | Creates a new spreadsheet with the provided configuration. |
change | Updates the spreadsheet configuration with new data. |
destroy | Deletes the spreadsheet and its configuration. |
replace | Replaces the existing spreadsheet configuration, typically used during snapshot recovery. |
Example
Section titled “Example”Persistence with Redis
Section titled “Persistence with Redis”A basic data persistence implementation using Redis without any access restrictions.
const server = require('@jspreadsheet/server');const { createClient } = require("redis");
const client = createClient({ socket: { host: 'redis', port: 6379 },});
// Connect to the serverclient.connect();
// Jspreadsheet licenseconst license = { clientId: '356a192b7913b04c54574d18c28d46e6395428ab', licenseKey: 'MmIyMDhmYmY4NGI1ZDY1ODAwNThjMGZkOTVkNjg2MmQ1NzZmYTFhOTBmZWI3N2M3ZmQ1N2Q3YjMwNDNhMjRhYmViYmRkNGVjZjZlMmNkNDVhODJhYzg1ZmRiY2E3OTJhYjA1ODQzNTliZGZiMmYwNWM4YmRmMjAyZmUwODA1NmEsZXlKamJHbGxiblJKWkNJNklqTTFObUV4T1RKaU56a3hNMkl3TkdNMU5EVTNOR1F4T0dNeU9HUTBObVUyTXprMU5ESTRZV0lpTENKdVlXMWxJam9pU25Od2NtVmhaSE5vWldWMElpd2laR0YwWlNJNk1UYzBNak0wTWpRd01Dd2laRzl0WVdsdUlqcGJJbXB6YUdWc2JDNXVaWFFpTENKamMySXVZWEJ3SWl3aWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0luVmxMbU52YlM1aWNpSXNJbU5rY0c0dWFXOGlMQ0pwYm5SeVlYTm9aV1YwY3k1amIyMGlMQ0p6Wm1OdlpHVmliM1F1WTI5dElpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5KbGJtUmxjaUlzSW5CaGNuTmxjaUlzSW1sdGNHOXlkR1Z5SWl3aWRtRnNhV1JoZEdsdmJuTWlMQ0pqYjIxdFpXNTBjeUlzSW5ObFlYSmphQ0lzSW1Ob1lYSjBjeUlzSW5CeWFXNTBJaXdpWW1GeUlpd2ljMmhsWlhSeklpd2lZMnh2ZFdRaUxDSnRZWE5ySWl3aWMyaGxaWFJ6SWl3aWMyVnlkbVZ5SWl3aWFXNTBjbUZ6YUdWbGRITWlYWDA9'}
server({ port: 3000, // Socker.io server configuration config: { cors: { origin: "*" }, }, error: async function(e) { console.log(e); // Kill the thread process.exit(1); }, beforeConnect: async function(query) { return true; }, load: async function(guid) { return await client.get(guid); }, create: async function(guid, config) { const result = await client.exists(guid);
if (result) { // A spreadsheet already exists return false; } else { // Create a new spreadsheet await client.set(guid, config);
return true; } }, destroy: async function(guid) { return await client.del(guid) .then(() => true) .catch(() => false); }, change: async function(guid, changes) { // Get the configuration from the cache let config = changes.instance.getConfig(); // Save that on the redis await client.set(guid, JSON.stringify(config)); }, license: license,});Considerations about the example
Section titled “Considerations about the example”This example saves the full spreadsheet for each transaction, even minor updates. To reduce I/O load, consider queuing changes and batching them periodically, minimizing write operations on your server.
Adapters
Section titled “Adapters”Developers can implement data persistence using events, offering flexibility in technology choice. Adapters are ready-made specific database implementations that simplify setup and enable faster deployment while preserving customization options.