QuadaStore - The ROBLOX Datastore Solution

QuadaStore - The ROBLOX Datastore Solution

New Project
"DataStoreService made easier!


About

QuadaStore is a new data store solution for ROBLOX developers. It provides a simple and convenient way to store and retrieve data.

With QuadaStore, you can easily save and access data for your ROBLOX games, without the hassle of getting confused. Whether you need to store high scores, player data, or any other type of information, QuadaStore has you covered.


Update Log

  • Added data compression to reduce character count and optimize storage.
  • Implemented prevention of another object from opening the same datastore key while it’s opened by another object.
  • Enabled cross-server communication for seamless data access across servers.
  • Auto-save functionality to automatically store data changes in the DataStore.

To benefit from these new features, ensure that the HttpService module is enabled in your game and use the updated version of the QuadaStore module provided.

Please note that data compression reduces the character count but may increase the actual size of the data due to the encoding process.


Links

We've also created comprehensive API documentation for QuadaStore, making it easy for you to get started and integrate our data store solution into your ROBLOX games.

So why wait? Try QuadaStore today, and simplify your ROBLOX data storage needs!

Currently, we use DataStoreService for a variety of jobs, but in the future, QuadaStore might support other techniques.

Any suggestions, ideas, bugs, or anything related to that should be posted via my DevForum Messages. (@DecentAgent)

6 Likes

QuadaStore API Documentation Update

We are excited to announce an update to the QuadaStore API Documentation! This update brings several new features and revisions to enhance your experience with QuadaStore. Let’s dive into the details:

New Features:

  1. Data Compression: Data is now compressed to reduce character count and optimize storage, resulting in improved performance and reduced costs.

  2. Concurrent Access Prevention: QuadaStore now prevents multiple objects from opening the same datastore key simultaneously, ensuring data integrity and preventing conflicts.

  3. Cross-Server Communication: QuadaStore now supports seamless communication and data access across different servers, enabling more flexible and scalable applications.

Revisions and Additions:

  • Added new class methods:

    • listKeys(): Retrieve a list of keys in the datastore.
    • listDataStores(): Retrieve a list of datastores in the ROBLOX DataStoreService.
    • lock(key: string): Lock a specific key to prevent other objects from opening it.
    • unlock(key: string): Unlock a previously locked key.
    • compress(data: string): Compress data using a compression algorithm.
    • uncompress(data: string): Uncompress previously compressed data.
  • Updated existing class methods with improved functionality.

Please note that the additional features listKeys(), listDataStores(), lock(), unlock(), compress(), and uncompress() are currently marked as experimental and are intended for script usage only. Use them at your own discretion.

To access the latest version of the QuadaStore API Documentation, visit our Documentation.

Make sure to update your integrations and take advantage of these exciting new features. We hope these additions enhance your development process and provide you with more flexibility and control over your data.

If you have any questions or need assistance, feel free to reach out to our support team.

Happy coding with QuadaStore!

3 Likes

so about this… i took a look in your module and found that the compression algorithm is just a json encoding?

function QuadaStore:CompressData(data)
	local compressedData = HttpService:JSONEncode(data)
	return compressedData
end

function QuadaStore:DecompressData(compressedData)
	local data = nil
	local success, errorMessage = pcall(function()
		data = HttpService:JSONDecode(compressedData)
	end)
	if not success then
		self:HandleError(QuadaStoreErrorCodes.CompressionError.Code, QuadaStoreErrorCodes.CompressionError.Message, errorMessage)
	end
	return data
end

I believe this would not compress the data and reduce the storage size

5 Likes

You’re right about that. Pretty much that is useless for now, but it is still being worked on.

4 Likes

QuadaStore API Documentation Update

We are excited to announce an update to the QuadaStore API Documentation! This update brings several new features and revisions to enhance your experience with QuadaStore. Let’s dive into the details:

We replaced the compress(data: string) and uncompress(data: string) with:

  • CompressData(data: string): Compress data using a compression algorithm.
  • UncompressData(data: string): Uncompress previously compressed data.

We coded the new compress and uncompress functions from scratch.

In order to save as much space as possible, compression has been introduced using my own method, which compresses all data to binary data. This indicates that you may just carry on as usual with saving and fetching while we take care of the rest.

Links

2 Likes
function QuadaStore:CompressData(data)
	local binaryData = ""

	for i = 1, #data do
		local byte = string.byte(data, i)
		local binaryByte = ""

		for j = 7, 0, -1 do
			binaryByte = binaryByte .. ((math.floor(byte / (2^j)) % 2) == 1 and "1" or "0")
		end

		binaryData = binaryData .. binaryByte
	end

	return binaryData
end

function QuadaStore:DecompressData(binaryData)
	local data = ""

	for i = 1, #binaryData, 8 do
		local binaryByte = string.sub(binaryData, i, i + 7)
		local byte = 0

		for j = 1, 8 do
			local bit = string.sub(binaryByte, j, j)
			byte = byte * 2 + (bit == "1" and 1 or 0)
		end

		data = data .. string.char(byte)
	end

	return data
end

Now it compresses and decompresses. :slight_smile:

5 Likes

it useful for large size of data mostly like a game that having a many building & positioning saves. this can decrease the lengths

2 Likes

QuadaStore Update

  • Added new error messages: In this update, we have introduced several new error messages to enhance the error reporting capabilities of the system. Although not all of them are currently utilized, they provide a foundation for future error handling and debugging improvements.

  • Updated the QuadaStore.new() function: We have made updates to the QuadaStore.new() function to improve its functionality and performance. These updates include optimizations and enhancements to ensure smoother operation and better utilization of system resources.

  • Added GetRequestBudgetForRequestType: With this update, we have introduced a new function called GetRequestBudgetForRequestType. This function allows users to retrieve information about the budget allocated for a specific type of request, enabling better control and management of resources.

  • Fixed the bug that did not compress the data whenever the compress function was called: Previously, there was a bug in the system that prevented data compression from occurring when the compress function was invoked. This update addresses the issue and ensures that data is properly compressed as intended, enhancing storage efficiency and reducing resource consumption.

  • Major bug patches: In this update, we have focused on resolving significant bugs that were affecting the system’s stability, security, or overall performance. By addressing these issues, we aim to provide a more reliable and seamless experience for our users.

Suggestions are appreciated!

3 Likes

no it is not, when you convert a table to a json string, it could technically increase the size because you can only store types that JSON supports, such as bools, string, arrays, objects, integers and floats, etc. and you would need to serialize non-json objects. and it does not reduce the size. (you still need to convert tables to json in order to store it in a datastore)

ex:
original data:

{coins=123, gems=456}

json encoded:

{"coins":123,"gems":456}
4 Likes

depends, if your data is not really that needed to compress

2 Likes

Another bug in QuadaStore limited the types of data that could be stored in the DataStore to strings exclusively. Now that the bug has been fixed, you can use this completely free of any known bugs. Please make a report in this post if you experience any problems so that we can fix it.

2 Likes

What this module can do that other like ProfileService can’t ?

4 Likes

QuadaStore and ProfileService are different. We employ many of the same techniques that a typical DataStore does, with the exception that we stone data into binary digits to prevent data loss and make it easier to store.

2 Likes

Look into this LZW based compression - great for general purpose compression, and compatible specifically with the JSON supported characters for Roblox DataStores.

Text compression - Resources / Community Resources - Developer Forum | Roblox

2 Likes

I’m working on some updates and planning to add new features for QuadaStore!


I would be greatly interested in observing the achievements you have attained through QuadaStore. Please feel free to contact me at your convenience should you wish to showcase your accomplishments with QuadaStore or share any concepts for prospective enhancements.

1 Like