Okay, so I have a DataStore that is currently 188 lines long. And while it works, I don't believe it's efficient, so I'm wondering if there's a way to shorten it.

Right now, the reason it's so long is because I'm saving every individual value into a table and then saving that table. I was thinking, maybe I could put all the values into a folder outside the DataStore and then save the folder. If this was possible I would be able to significantly cut down on code in my DataStore. It would also allow me to add new values easier and faster than before. Even if this isn't possible, if anyone knows an alternative, I would greatly appreciate it.

This might be a pointless question though, seeing as I have no idea how other people save data and they may have over 1k lines.

This is currently my code, you can see why I have so many lines now:

local DataStoreService = game:GetService("DataStoreService")
local Data = DataStoreService:GetDataStore("DataStore11")

game.Players.PlayerAdded:Connect(function(player)
	game.Players:WaitForChild(player.Name)
	player:WaitForChild("leaderstats")
	player:WaitForChild("SpeedMulti")
	game.Workspace:WaitForChild(player.Name)
	
	wait(1)
	
	local Key = player.UserId
	
	local Leaderstats = player.leaderstats
	local Speed = player.Speed
	local Rebirths = Leaderstats.Rebirths
	local TimePlayed = player.TPValue
	local Gems = player.Gems
	local RebirthCost = player.RebirthCost
	local SpeedMulti = player.SpeedMulti
	local SpdUpgCost = player.SpdUpgCost
	local JmpUpgCost = player.JmpUpgCost
	local JumpMulti = player.JumpMulti
	local JumpPower = player.JumpPower
	local Cardio = Leaderstats.Cardio
	local CardioMulti = player.CardioMulti
	local TotalSpeed = player.TotalSpeed
	local TotalJumpPower = player.TotalJumpPower
	local TotalCardio = player.TotalCardio
	local TotalGems = player.TotalGems
	
	local DefaultStats = {
		4, -- 1/Speed
		0, -- 2/Rebirths
		0, -- 3/Time Played
		0, -- 4/Gems
		1000, -- 5/Rebirth Cost
		1, -- 6/Speed Multiplier
		100, -- 7/Speed Upgrade Cost
		100, -- 8/Jump Upgrade Cost
		1, -- 9/Jump Multiplier
		64, -- 10/Jump Power
		68, -- 11/Cardio
		1, -- 12/CardioMulti
		4, -- 13/TotalSpeed
		64, -- 14/TotalJumpPower
		68, -- 15/TotalCardio
		0 -- 16/TotalGems
	}
	
	local Stats = {
		Speed.Value, -- 1
		Rebirths.Value, -- 2
		TimePlayed.Value, -- 3
		Gems.Value, -- 4
		RebirthCost.Value, -- 5
		SpeedMulti.Value, -- 6
		SpdUpgCost.Value, -- 7
		JmpUpgCost.Value, -- 8
		JumpMulti.Value, -- 9
		JumpPower.Value, -- 10
		Cardio.Value, -- 11
		CardioMulti.Value, -- 12
		TotalSpeed.Value, -- 13
		TotalJumpPower.Value, -- 14
		TotalCardio.Value, -- 15
		TotalGems.Value -- 16
	}
	
	local LoadStats
	local success, err = pcall(function()
		LoadStats = Data:GetAsync(Key)
	end)
	
	if LoadStats == nil then
		Speed.Value = DefaultStats[1]
		Rebirths.Value = DefaultStats[2]
		TimePlayed.Value = DefaultStats[3]
		Gems.Value = DefaultStats[4]
		RebirthCost.Value = DefaultStats[5]
		SpeedMulti.Value = DefaultStats[6]
		SpdUpgCost.Value = DefaultStats[7]
		JmpUpgCost.Value = DefaultStats[8]
		JumpMulti.Value = DefaultStats[9]
		JumpPower.Value = DefaultStats[10]
		Cardio.Value = DefaultStats[11]
		CardioMulti.Value = DefaultStats[12]
		TotalSpeed.Value = DefaultStats[13]
		TotalJumpPower.Value = DefaultStats[14]
		TotalCardio.Value = DefaultStats[15]
		TotalGems.Value = DefaultStats[16]
		
		Data:SetAsync(Key, Stats)
		print("No data to load. Setting data...")
	else
		Speed.Value = LoadStats[1]
		Rebirths.Value = LoadStats[2]
		TimePlayed.Value = LoadStats[3]
		Gems.Value = LoadStats[4]
		RebirthCost.Value = LoadStats[5]
		SpeedMulti.Value = LoadStats[6]
		SpdUpgCost.Value = LoadStats[7]
		JmpUpgCost.Value = LoadStats[8]
		JumpMulti.Value = LoadStats[9]
		JumpPower.Value = LoadStats[10]
		Cardio.Value = LoadStats[11]
		CardioMulti.Value = LoadStats[12]
		TotalSpeed.Value = LoadStats[13]
		TotalJumpPower.Value = LoadStats[14]
		TotalCardio.Value = LoadStats[15]
		TotalGems.Value = LoadStats[16]
		
		print("Data loaded!")
	end
	
	while wait(300) do
		local success, err = pcall(function()
			Data:UpdateAsync(Key, function(oldValue)
				return Stats
			end)
		end)
		
		if success then
			print("Data auto saved!")
		else
			print("Auto save failed.")
			warn(err)
		end
	end
end)

game.Players.PlayerRemoving:Connect(function(player)
	local Key = player.UserId
	
	local Leaderstats = player.leaderstats
	local Speed = player.Speed
	local Rebirths = Leaderstats.Rebirths
	local TimePlayed = player.TPValue
	local Gems = player.Gems
	local RebirthCost = player.RebirthCost
	local SpeedMulti = player.SpeedMulti
	local SpdUpgCost = player.SpdUpgCost
	local JmpUpgCost = player.JmpUpgCost
	local JumpMulti = player.JumpMulti
	local JumpPower = player.JumpPower
	local Cardio = Leaderstats.Cardio
	local CardioMulti = player.CardioMulti
	local TotalSpeed = player.TotalSpeed
	local TotalJumpPower = player.TotalJumpPower
	local TotalCardio = player.TotalCardio
	local TotalGems = player.TotalGems
	
	local Stats = {
		Speed.Value,
		Rebirths.Value,
		TimePlayed.Value,
		Gems.Value,
		RebirthCost.Value,
		SpeedMulti.Value,
		SpdUpgCost.Value,
		JmpUpgCost.Value,
		JumpMulti.Value,
		JumpPower.Value,
		Cardio.Value,
		CardioMulti.Value,
		TotalSpeed.Value,
		TotalJumpPower.Value,
		TotalCardio.Value,
		TotalGems.Value
	}
	
	local success, err = pcall(function()
		Data:UpdateAsync(Key, function(oldData)
			return Stats
		end)
	end)
	
	if success then
		print("Data saved!")
	else
		print("Data didn't save.")
		warn(err)
	end
end)

game:BindToClose(function()
	wait(10)
end)