mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2025-12-12 19:14:34 +01:00
optimize db writes, should improve performance in high player server
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
using Common.Resources.Proto;
|
using Common.Resources.Proto;
|
||||||
using Common.Utils.ExcelReader;
|
using Common.Utils.ExcelReader;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
|
|
||||||
@@ -62,6 +61,18 @@ namespace Common.Database
|
|||||||
|
|
||||||
return avatar;
|
return avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void SaveBulk(IEnumerable<AvatarScheme> avatars)
|
||||||
|
{
|
||||||
|
List<WriteModel<AvatarScheme>> ops = new();
|
||||||
|
|
||||||
|
foreach (AvatarScheme avatar in avatars)
|
||||||
|
{
|
||||||
|
ops.Add(avatar.SaveOp());
|
||||||
|
}
|
||||||
|
|
||||||
|
collection.BulkWrite(ops);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AvatarScheme : Resources.Proto.Avatar
|
public class AvatarScheme : Resources.Proto.Avatar
|
||||||
@@ -75,12 +86,16 @@ namespace Common.Database
|
|||||||
public uint OwnerUid { get; set; }
|
public uint OwnerUid { get; set; }
|
||||||
public new List<AvatarSkill> SkillLists { get; set; } = new();
|
public new List<AvatarSkill> SkillLists { get; set; } = new();
|
||||||
|
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
Avatar.collection.ReplaceOne(Builders<AvatarScheme>.Filter.Eq(avatar => avatar.Id, Id), this);
|
Avatar.collection.ReplaceOne(Builders<AvatarScheme>.Filter.Eq(avatar => avatar.Id, Id), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WriteModel<AvatarScheme> SaveOp()
|
||||||
|
{
|
||||||
|
return new ReplaceOneModel<AvatarScheme>(Builders<AvatarScheme>.Filter.Eq(avatar => avatar.Id, Id), this);
|
||||||
|
}
|
||||||
|
|
||||||
public PlayerLevelData.LevelData AddExp(uint exp)
|
public PlayerLevelData.LevelData AddExp(uint exp)
|
||||||
{
|
{
|
||||||
PlayerLevelData.LevelData levelData = AvatarLevelData.GetInstance().CalculateLevel((int)Level, (int)(exp + Exp));
|
PlayerLevelData.LevelData levelData = AvatarLevelData.GetInstance().CalculateLevel((int)Level, (int)(exp + Exp));
|
||||||
|
|||||||
@@ -33,6 +33,18 @@ namespace Common.Database
|
|||||||
InitData(uid);
|
InitData(uid);
|
||||||
return collection.AsQueryable().Where(x => x.OwnerUid == uid && ShowMapList.Contains(x.MapId)).ToList(); ;
|
return collection.AsQueryable().Where(x => x.OwnerUid == uid && ShowMapList.Contains(x.MapId)).ToList(); ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void SaveBulk(IEnumerable<OpenWorldScheme> openWorlds)
|
||||||
|
{
|
||||||
|
List<WriteModel<OpenWorldScheme>> ops = new();
|
||||||
|
|
||||||
|
foreach (OpenWorldScheme ow in openWorlds)
|
||||||
|
{
|
||||||
|
ops.Add(ow.SaveOp());
|
||||||
|
}
|
||||||
|
|
||||||
|
collection.BulkWrite(ops);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||||
@@ -50,5 +62,10 @@ namespace Common.Database
|
|||||||
{
|
{
|
||||||
OpenWorld.collection.ReplaceOne(Builders<OpenWorldScheme>.Filter.Eq(x => x.Id, Id), this);
|
OpenWorld.collection.ReplaceOne(Builders<OpenWorldScheme>.Filter.Eq(x => x.Id, Id), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WriteModel<OpenWorldScheme> SaveOp()
|
||||||
|
{
|
||||||
|
return new ReplaceOneModel<OpenWorldScheme>(Builders<OpenWorldScheme>.Filter.Eq(x => x.Id, Id), this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,15 +23,8 @@ namespace PemukulPaku.GameServer.Game
|
|||||||
{
|
{
|
||||||
User.Save();
|
User.Save();
|
||||||
Equipment.Save();
|
Equipment.Save();
|
||||||
|
Common.Database.Avatar.SaveBulk(AvatarList);
|
||||||
foreach (AvatarScheme Avatar in AvatarList)
|
OpenWorld.SaveBulk(OpenWorlds);
|
||||||
{
|
|
||||||
Avatar.Save();
|
|
||||||
}
|
|
||||||
foreach (OpenWorldScheme OpenWorld in OpenWorlds)
|
|
||||||
{
|
|
||||||
OpenWorld.Save();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetAvatarsTodayGoodfeel()
|
public void ResetAvatarsTodayGoodfeel()
|
||||||
|
|||||||
Reference in New Issue
Block a user