using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FASTER.core; namespace MyFaster { public class LengRe { public void AAA() { // 创建存储设备(混合内存+磁盘) var logDevice = Devices.CreateLogDevice("colddata.log"); // 冷数据存储到磁盘 var logSettings = new LogSettings { LogDevice = logDevice, MemorySizeBits = 20, // 1MB 内存(热数据区) PageSizeBits = 16 // 64KB 磁盘页 }; // 创建 FASTER 实例 var store = new FasterKV( size: 1 << 16, // 哈希表大小 logSettings: logSettings ); // 创建会话 var session = store.NewSession(new SimpleFunctions()); // 写入数据(自动处理热/冷数据) Key key = new Key { Id = 1 }; Value value = new Value { Data = "示例数据", LastAccessed = DateTime.UtcNow }; session.Upsert(ref key, ref value); // 读取数据(热数据在内存,冷数据从磁盘加载) Value output = default; Status status = session.Read(ref key, ref output); Console.WriteLine($"读取数据: {output.Data}"); Console.WriteLine($"最后访问: {output.LastAccessed}"); // 更新访问时间(保持数据热度) output.LastAccessed = DateTime.UtcNow; session.Upsert(ref key, ref output); // 填充测试数据 for (int i = 0; i < 1000; i++) { Key k = new Key { Id = i }; Value v = new Value { Data = $"Item-{i}", LastAccessed = DateTime.UtcNow }; session.Upsert(ref k, ref v); } // 访问部分数据保持热度 for (int i = 0; i < 10; i++) // 频繁访问前10条 { Key k = new Key { Id = i }; Value v = default; session.Read(ref k, ref v); v.LastAccessed = DateTime.UtcNow; session.Upsert(ref k, ref v); } // 此时: // - 前10条是热数据(在内存) // - 其余990条是冷数据(在磁盘) } public void Read() { } } public struct Key : IEquatable { public int Id; public bool Equals(Key other) => Id == other.Id; } public struct Value { public string Data; public DateTime LastAccessed; } }