初始化
This commit is contained in:
98
MyFaster/LengRe.cs
Normal file
98
MyFaster/LengRe.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
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<Key, Value>(
|
||||
size: 1 << 16, // 哈希表大小
|
||||
logSettings: logSettings
|
||||
);
|
||||
|
||||
// 创建会话
|
||||
var session = store.NewSession(new SimpleFunctions<Key, Value>());
|
||||
|
||||
// 写入数据(自动处理热/冷数据)
|
||||
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<Key>
|
||||
{
|
||||
public int Id;
|
||||
public bool Equals(Key other) => Id == other.Id;
|
||||
}
|
||||
|
||||
public struct Value
|
||||
{
|
||||
public string Data;
|
||||
public DateTime LastAccessed;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user