[Обновление 2021 года]
Всем, кто читает это, я могу порекомендовать попробовать AceBase. AceBase - это база данных в реальном времени, которая обеспечивает удобное хранение и синхронизацию между базами данных браузера и сервера. Он использует IndexedDB в браузере и свой собственный двоичный формат db или хранилище SQL Server / SQLite на стороне сервера. Хранилище MySQL также находится в планах. Автономные правки синхронизируются при повторном подключении, и клиенты уведомляются об изменениях удаленной базы данных в реальном времени через веб-сокет (БЫСТРО!).
Вдобавок ко всему, AceBase имеет уникальную функцию, называемую прокси-серверами данных в реальном времени, которая позволяет вам сохранять все изменения в объектах в памяти и синхронизировать их с локальными и серверными базами данных, поэтому вы можете полностью забыть о кодировании базы данных и программировать как если бы вы используете только локальные объекты. Неважно, в сети вы или офлайн.
В следующем примере показано, как создать локальную базу данных IndexedDB в браузере, как подключиться к удаленному серверу базы данных, который синхронизируется с локальной базой данных, и как создать прокси-сервер данных в реальном времени, который полностью исключает дальнейшее кодирование базы данных.
const { AceBaseClient } = require('acebase-client');
const { AceBase } = require('acebase');
// Create local database with IndexedDB storage:
const cacheDb = AceBase.WithIndexedDB('mydb-local');
// Connect to server database, use local db for offline storage:
const db = new AceBaseClient({ dbname: 'mydb', host: 'db.myproject.com', port: 443, https: true, cache: { db: cacheDb } });
// Wait for remote database to be connected, or ready to use when offline:
db.ready(async () => {
// Create live data proxy for a chat:
const emptyChat = { title: 'New chat', messages: {} };
const proxy = await db.ref('chats/chatid1').proxy(emptyChat); // Use emptyChat if chat node doesn't exist
// Get object reference containing live data:
const chat = proxy.value;
// Update chat's properties to save to local database,
// sync to server AND all other clients monitoring this chat in realtime:
chat.title = `Changing the title`;
chat.messages.push({
from: 'ewout',
sent: new Date(),
text: `Sending a message that is stored in the database and synced automatically was never this easy!` +
`This message might have been sent while we were offline. Who knows!`
});
// To monitor realtime changes to the chat:
chat.onChanged((val, prev, isRemoteChange, context) => {
if (val.title !== prev.title) {
console.log(`Chat title changed to ${val.title} by ${isRemoteChange ? 'us' : 'someone else'}`);
}
});
});
Для получения дополнительных примеров и документации см. ядро базы данных реального времени AceBase на npmjs.com.
person
Ewout Stortenbeker
schedule
18.03.2021