mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2025-12-12 22:24: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.Utils.ExcelReader;
|
||||
using Newtonsoft.Json;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Driver;
|
||||
|
||||
@@ -62,6 +61,18 @@ namespace Common.Database
|
||||
|
||||
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
|
||||
@@ -75,12 +86,16 @@ namespace Common.Database
|
||||
public uint OwnerUid { get; set; }
|
||||
public new List<AvatarSkill> SkillLists { get; set; } = new();
|
||||
|
||||
|
||||
public void Save()
|
||||
{
|
||||
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)
|
||||
{
|
||||
PlayerLevelData.LevelData levelData = AvatarLevelData.GetInstance().CalculateLevel((int)Level, (int)(exp + Exp));
|
||||
|
||||
@@ -33,6 +33,18 @@ namespace Common.Database
|
||||
InitData(uid);
|
||||
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.
|
||||
@@ -50,5 +62,10 @@ namespace Common.Database
|
||||
{
|
||||
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();
|
||||
Equipment.Save();
|
||||
|
||||
foreach (AvatarScheme Avatar in AvatarList)
|
||||
{
|
||||
Avatar.Save();
|
||||
}
|
||||
foreach (OpenWorldScheme OpenWorld in OpenWorlds)
|
||||
{
|
||||
OpenWorld.Save();
|
||||
}
|
||||
Common.Database.Avatar.SaveBulk(AvatarList);
|
||||
OpenWorld.SaveBulk(OpenWorlds);
|
||||
}
|
||||
|
||||
public void ResetAvatarsTodayGoodfeel()
|
||||
|
||||
Reference in New Issue
Block a user