All Projects → evaera → Quicksave

evaera / Quicksave

Licence: MIT license
DataStore abstraction library. Looking for a new maintainer.

Programming Languages

lua
6591 projects

Labels

Projects that are alternatives of or similar to Quicksave

matter
A modern ECS library for Roblox.
Stars: ✭ 39 (+50%)
Mutual labels:  roblox
awesome-roblox
A curated list of ROBLOX resources, plugins and frameworks!
Stars: ✭ 76 (+192.31%)
Mutual labels:  roblox
roblox-js
!!!THIS PROJECT IS NO LONGER MAINTAINED!!! Execute ROBLOX website actions in node.js
Stars: ✭ 46 (+76.92%)
Mutual labels:  roblox
Flipper
A motion library for Roblox
Stars: ✭ 80 (+207.69%)
Mutual labels:  roblox
Fabric
Fabric provides infrastructure for representing the state of things in your game.
Stars: ✭ 59 (+126.92%)
Mutual labels:  roblox
Adonis 2.0
Roblox Server Administration System
Stars: ✭ 36 (+38.46%)
Mutual labels:  roblox
Aurora
(Deprecated) Aurora is a library that can manage status effects (known as "Auras") in your Roblox game.
Stars: ✭ 23 (-11.54%)
Mutual labels:  roblox
Roblox
Some of mine and other people's old codes that we used to run them in Script Builder.
Stars: ✭ 32 (+23.08%)
Mutual labels:  roblox
TopbarPlus
Construct dynamic and intuitive topbar icons. Enhance the appearance and behaviour of these icons with features such as themes, dropdowns and menus.
Stars: ✭ 51 (+96.15%)
Mutual labels:  roblox
roact-material
Material design in Roblox w/ Roact!
Stars: ✭ 18 (-30.77%)
Mutual labels:  roblox
ro.py
ro.py is a modern, asynchronous Python 3 wrapper for the Roblox API.
Stars: ✭ 65 (+150%)
Mutual labels:  roblox
rojo.space
Rojo website
Stars: ✭ 32 (+23.08%)
Mutual labels:  roblox
Lua-Obfuscator
A Lua Obfuscator made for Roblox, but should work on most Lua applications
Stars: ✭ 84 (+223.08%)
Mutual labels:  roblox
MockDataStoreService
Emulation of Roblox's DataStoreService for seamless offline development & testing
Stars: ✭ 39 (+50%)
Mutual labels:  roblox
luacheck-roblox
Luacheck specifications for Roblox Lua
Stars: ✭ 36 (+38.46%)
Mutual labels:  roblox
Adonis
Roblox Server Administration System
Stars: ✭ 134 (+415.38%)
Mutual labels:  roblox
StudioComponents
(WIP) Roact implementations of Roblox Studio components.
Stars: ✭ 35 (+34.62%)
Mutual labels:  roblox
Lua-Obfuscator
Obfuscate your lua code because it's so easy to steal!
Stars: ✭ 69 (+165.38%)
Mutual labels:  roblox
EvLightning
EvLightning is a Roblox Lua library. Its purpose is to generate realistic-looking lightning bolts. This could be used to easily add lightning strike effects to any game
Stars: ✭ 34 (+30.77%)
Mutual labels:  roblox
Roblox-Miscellaneous
A set of ROBLOX based utilities
Stars: ✭ 21 (-19.23%)
Mutual labels:  roblox

Looking for new maintainer

I never ended up using Quicksave in a game, and have no need for it moving forward, so it's hard to justify spending personal time maintaining a library I don't use. I think it was a nice experiment, but I would probably do things differently if I were to write a new saving system today. Specifically, the tight coupling between layers makes writing tests really hard, because the layers can't be constructed in a vacuum. If you want to take over Quicksave, finish it out and maintaing it moving forward, let me know in an issue so I can redirect newcomers to this repo to your fork!

Quicksave

DataStore abstraction library that offers:

  • Collection/Document structure
  • Session locking
  • Schemas
  • Migrations
  • Data compression
  • Automatic retry
  • Automatic throttling
  • Backups (NYI)
  • Promise-based API
  • Developer sanity

Not ready for production yet. Needs a lot more tests.

Concepts

Collections

Collections are analogous to Roblox Datastores. Collections contain documents. For each collection, you, as the developer, specify:

  • A schema that each document in the collection must follow
  • The default data that new documents should have (this must adhere to the schema)
  • A set of migrations that run in order to translate documents that follow older versions of the schema into the current version.

Documents

Documents are potentially large data structures that are related to each other. Typically, you will have one document per player of your game. Documents are read and written to as one operation to the DataStore, because a document is always stored in a single DataStore key.

Acquiring a document also means that you have an exclusive lock on the data inside of it. Another game server can never write to this document as long as it's active on the current server.

Documents have keys which you can read or write to individually. You can only read or write keys that are present in the collection's schema.

Data within a document is automatically compressed which allows you to have larger documents.

Reading from or writing to a document does not yield. By the time you have a reference to a document, all of its data has loaded. Documents are automatically saved on a periodic interval [NYI] and saved when the game server closes [NYI]. You can also manually save a document at any time.

Due to DataStore throttling, saving is not instant. Documents will only ever save their latest data. If the save is throttled and you call save multiple times, the document will only save once with the latest data.

Documents can be closed, which unlocks the document, allowing other game servers to acquire a lock on it. Documents always save their current data upon closing. You are unable to write to a document that has begun closing. Closing a document can take up to a few seconds due to DataStore throttling.

Once a document has fully closed and become inactive, attempting to open the document again immediately will be delayed for up to seven seconds due to DataStore throttling.

Migrations

If you ever need to change the structure data in your schema, you can write a migration which can convert existing documents to the current schema. All migrations that ocurred between the current document and the present schema will be run in order.

Internals

Data flows through the library in this order:

  1. AccessLayer (Handles locks)
  2. MigrationLayer
  3. DataLayer (Handles compression)
  4. RetryLayer
  5. ThrottleLayer
  6. DataStoreLayer
  7. Roblox Datastores

To do

  • Write more tests. And more tests. And more tests.
  • Backups
  • Saving on an interval for active documents
  • Saving on game close
  • Easy way to tie documents to players
  • Panic event (if too many datastore operations fail, fire this event)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].