初始化

This commit is contained in:
2025-11-21 08:48:01 +08:00
commit b4d684a84c
202 changed files with 28585 additions and 0 deletions

108
MyFaster/Program.cs Normal file
View File

@@ -0,0 +1,108 @@
using System.Diagnostics;
using System.Net;
using FASTER.core;
using MemoryPack;
namespace MyFaster
{
[MemoryPackable()]
public partial class MyData
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
public int Age { get; set; }
public string? DetailData { get; set; }
}
internal class Program
{
public static byte[] Serialize<T>(T obj)
{
return MemoryPackSerializer.Serialize(obj);
}
public static T Deserialize<T>(byte[] data)
{
return MemoryPackSerializer.Deserialize<T>(data);
}
public class MyValueSerializer1 : BinaryObjectSerializer<MyData>
{
public override void Serialize(ref MyData value)
{
writer.Write(value.FirstName);
writer.Write(value.LastName);
writer.Write(value.Age);
writer.Write(value.DetailData);
}
public override void Deserialize(out MyData value)
{
value = new MyData
{
FirstName = reader.ReadString(),
LastName = reader.ReadString(),
Age = reader.ReadInt32(),
DetailData = reader.ReadString()
};
}
}
public class MyValueSerializer : BinaryObjectSerializer<MyData>
{
public override void Serialize(ref MyData value)
{
//writer.Write(IPAddress.HostToNetworkOrder(Q.Length)); // 4字节长度头
var Q = MemoryPackSerializer.Serialize(value);
writer.Write(Q.Length); // 4字节长度头
writer.Write(Q);
}
public override void Deserialize(out MyData value)
{
int length = reader.ReadInt32(); // 读长度头
byte[] buffer = reader.ReadBytes(length); // 读数据体
value = MemoryPackSerializer.Deserialize<MyData>(buffer); // 反序列化
}
}
static async Task Main(string[] args)
{
using var settings = new FasterKVSettings<string, MyData>()
{
LogDevice = Devices.CreateLogDevice("c:/mytemp/log"), // 元数据日志
ObjectLogDevice = Devices.CreateLogDevice("c:/mytemp/obj"), // 对象数据日志
TryRecoverLatest = true,
ValueSerializer = () => new MyValueSerializer()
};
using var store = new FasterKV<string, MyData>(settings);
using var session = store.NewSession(new SimpleFunctions<string, MyData>());
MyData mydata0 = new MyData() { FirstName = "1", LastName = "fdfdf", DetailData = "detail1" };
MyData mydata1 = new MyData() { FirstName = "1", LastName = "fdfdf", DetailData = "detail1" };
MyData mydata2 = new MyData() { FirstName = "1", LastName = "fdfdf", DetailData = "detail1" };
string mma0 = "a";
string mma1 = "b";
string mma2 = "c";
session.Upsert(ref mma0, ref mydata0);
session.Upsert(ref mma1, ref mydata1);
session.Upsert(ref mma2, ref mydata2);
session.CompletePending(true);
// 创建增量检查点(性能更好)
await store.TakeHybridLogCheckpointAsync(CheckpointType.FoldOver);
// 方法1完整检查点推荐
await store.TakeFullCheckpointAsync(CheckpointType.Snapshot);
//完整检查点
await store.TakeFullCheckpointAsync(CheckpointType.FoldOver);
MyData output = null;
var status = session.Read(ref mma0, ref output);
Console.WriteLine("Hello, World!");
}
}
}