Files
Web_BLSKafka_Server_Prod/MyFaster/MyFun.cs

99 lines
2.7 KiB
C#
Raw Normal View History

2025-11-21 08:48:01 +08:00
using FASTER.core;
// 定义数据结构
public struct MyKey : IEquatable<MyKey>
{
public int Id;
public bool Equals(MyKey other) => Id == other.Id;
public override int GetHashCode() => Id.GetHashCode();
}
public struct MyValue
{
public byte[] Data;
public DateTime Timestamp;
}
public struct MyInput
{
public byte[] NewData;
}
public struct MyOutput
{
public MyValue Value;
public bool Updated;
}
public struct MyContext
{
public string OperationId;
public DateTime StartTime;
}
// 实现自定义 Functions
public class MyCustomFunctions : FunctionsBase<MyKey, MyValue, MyInput, MyOutput, MyContext>
{
// 读取完成回调
public override void ReadCompletionCallback(ref MyKey key, ref MyInput input, ref MyOutput output, MyContext ctx, Status status, RecordMetadata recordMetadata)
{
base.ReadCompletionCallback(ref key, ref input, ref output, ctx, status, recordMetadata);
}
//// 写入完成回调
//public override void UpsertCompletionCallback(
// ref MyKey key, ref MyValue value, MyContext ctx)
//{
// Console.WriteLine($"Upsert completed for key {key.Id}");
//}
//// 删除完成回调
//public override void DeleteCompletionCallback(
// ref MyKey key, MyContext ctx)
//{
// Console.WriteLine($"Delete completed for key {key.Id}");
//}
//// RMW (Read-Modify-Write) 操作 - 核心功能!
//public override void RMWCompletionCallback(
// ref MyKey key, ref MyInput input, ref MyOutput output,
// MyContext ctx, Status status)
//{
// if (status == Status.OK)
// {
// Console.WriteLine($"RMW completed for key {key.Id}");
// }
//}
//// 并发控制:当多个线程同时修改相同键时调用
//public override bool ConcurrentWriter(
// ref MyKey key, ref MyValue value, ref MyValue newValue)
//{
// // 返回 true 表示接受新值false 表示拒绝
// return newValue.Timestamp > value.Timestamp;
//}
//// 读取时复制:允许在读取时修改返回值
//public override bool SingleReader(
// ref MyKey key, ref MyInput input, ref MyValue value, ref MyOutput dst)
//{
// dst.Value = value;
// dst.Updated = false;
// return true;
//}
//// 写入时处理:自定义写入逻辑
//public override bool ConcurrentWriter(
// ref MyKey key, ref MyValue value, ref MyValue newValue)
//{
// // 只有新数据的时间戳更晚时才更新
// if (newValue.Timestamp > value.Timestamp)
// {
// value = newValue;
// return true;
// }
// return false;
//}
}