(Archived) Minty! - DataStore Management System

DISCLAIMER: MINTY IS ARCHIVED!

Archived as of 2021-07-29

Here’s why you should care:

Available alternatives are great for their purposes. Minty doesn’t exist to succeed any of these alternatives such as: DataStore2, ProfileService, QuickSave, DiceDataStore, and MANY MORE!

However Minty’s core values are inherently different. Session-locking is amazing, it is the second best-thing to transactions. But in hindsight, that’s not the end of item duplication that can instance from trading. Minty provides a solution. Minty currently runs on the principle of Two Phase Commit Protocol. A pattern to implement synchronous transactions to NoSQL databases. At the moment, it should be your reason to use it!

Minty is for big-production games, it is currently being deployed into a game with a huge codebase, implementing features CAN be detrimental and break things you never expected to break. Which is why Minty is a typescript-first implementation.

Huge games, expect huge data. Minty has auto-sharding, meaning on read it will divide up data into manageable chunks when necessary! Sometimes a dataset is too large to be stored into a single datastore, sharding allows a datastore cluster to scale along with its data and traffic growth!

Finally the last feature worth mentioning is read-replication. Incidents will happen no matter how good the software is! Hence why we use read replicas to copy a primary instance that reflects changes to the primary key in real-time. Read replication lets you offload read request or analytics traffic from the primary easily and Minty provides advanced tooling to let you interface with that data at any moment from anywhere. Example: Hear about an incident regarding a player’s data being corrupted? Simple command through the Minty discord bot can let you rollback its state.

We developers have lives, and Minty exists to help handle data in an easy way but most importantly with safety.

image Why Roblox-TS (typescript)

Minty :green_heart: Roblox-TS.
Roblox-TS aligns with our vision a lot. Typescript is ideal for huge codebases managed by teams but roblox-TS gives us developers confidence that when implementing features that we won’t make some silly mistake.

Available for download?

No. At least not yet. The more users of Minty, our online tooling gets slower. The team behind Minty actively works on setting up server routes to make sure Minty is always available. There’s limited available data and we don’t have the necessary funds to infinitely open more servers and increase the bandwidth.

Hence Minty won’t be free, not anytime soon. With more supporters, there’s a chance we provide a freemium model where the online tooling is available only for premium users. We don’t know but hopefully we get enough support from you guys to know that there is a market in need of Minty :smiling_face_with_three_hearts:.

Have any questions? Please ask below and I will do my best to answer them.

I have decided to archive Minty for a few reasons.

  1. As of today, we deployed it in a production project and the company that I worked for has acquired rights to the software, and thus I am no longer the rightful owner of the software and cannot distribute it for open source use.
  2. Minty tried to become too much, it was a caching library, it was an AI bot, it was Live-Ops, Real-Time Analytics. It grew to an overwhelming size and it honestly became too expensive for myself to maintain.
  3. I had very unrealistic goals and I poured a lot of time into it, but it turned out second-rate in comparisons to competitors because it wasn’t specialized in one thing.

Although there was a lot of promise for the project, and I felt like I let everyone down, thus I have rewritten the caching library part of the system which I believed to have been the most important part from scratch and renamed it to ‘Prophet’.

Prophet will still feature Minty’s most sought after features, transactions, persistent retries, proper error handling, read replicas for disaster recovery, mutation sentry and more. However this time kept simple in the core and most importantly, will be for everyone’s use for free!

17 Likes

Wow, Really cool.
I think it should go in #resources:community-resources.
Is it a plugin?

As he said its not. Read this section of the post.

1 Like

This is awesome. Can’t wait for it to be free. Even if it takes 5 years.

Keep up the good work.

1 Like

This is quite cool! I will like to see a data management using HTTPSService.

Would you consider writing this in lua too? Can spread to larger audience then.

1 Like

Cool, but I don’t see the purpose in this

So this separates data into chunks? WOW! that has been something I have gotten in the back of my head for quite a while, but honestly;

Don’t use DataStore2, at least not it’s OrderedBackups solution for now. Soon we’ll be having a new DataStore API revamp, on which a lot of what DataStore2 is praises for, versioning, will be direct to datastore API’s. For now, I would recommend going for ProfileService.

As Kampfkarren says, he doesn’t believe DS2’s sucess with data management is the versions and the way you can get older versions, he thinks it’s the entire DS2 package that handles data well.

What are you talking about exactly?

I do!


Session locking is a great step in the right direction for managing and making sure you load data correctly and at the right time. Session locking is mostly about making sure every single call is done before trying to load data; it’s good to see this has that.

@alexfinger21 Is there something you would like clarified?

@LucasTutoriaisSaimo

We do not use DataStore2’s orderedbackups and as you mentioned, we are preparing for the new APIs :slight_smile:

There is an assumption that Minty uses a leaked API of which lets external applications access the Roblox DataStore. Which we don’t have. May require more journaling in order to better efficient the data flow.

Minty wants you to focus on transactions not session-locks!! Session-locking is a necessity after players discovered that you can dupe items by rejoining quickly, this is because :GetAsync returns a cached result. Session locking is a solution in that provides strong consistency of which locks reads until it is ready. However, that is only ONE of the ways to prevent item duplication. Minty’s transactions sets to eliminate all other possible cases.

3 Likes

Sorry for the bump, anyways, we where supposed to get this datastore api update sometime in Q1 2021, but … I was actually gonna bump this to say it would be released sometime soon, but it basically got delayed by a lot.

So like September and stuff, kind of sad, I mean they have to do what they have to do, but yeah.
:confused:

Hopefully these changes mean that you’re able to move over without doing anything, but I’m not sure. I usually advised agaisn’t making anything before these datastore changes, but if you need to get something done right now, just do it right now, this update probably gonna take a while™ anyways.

You can view the current status of this here.