Skip to content
This repository was archived by the owner on Nov 8, 2020. It is now read-only.

Commit b9f688d

Browse files
committed
Fixed table splitting algorithm to support past time.
1 parent 7c8e6f1 commit b9f688d

1 file changed

Lines changed: 29 additions & 9 deletions

File tree

src/Ray.Storage.SQLCore/Configuration/StorageOptions.cs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public StorageOptions(IServiceProvider serviceProvider)
2323
}
2424
public bool Singleton { get; set; }
2525
public string UniqueName { get; set; }
26+
/// <summary>
27+
/// 分表间隔时间
28+
/// 设置为0时表示不分表
29+
/// </summary>
2630
public long SubTableMillionSecondsInterval { get; set; }
2731
public string EventTable => $"{UniqueName}_Event";
2832
public string SnapshotTable => $"{UniqueName}_Snapshot";
@@ -81,16 +85,32 @@ public async ValueTask<EventSubTable> GetTable(long eventTimestamp)
8185
if (subTable is null)
8286
{
8387
var lastSubTable = getTask.Result.LastOrDefault();
84-
var startTime = lastSubTable != null? (lastSubTable.EndTime == lastSubTable.StartTime ? DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() : lastSubTable.EndTime) : eventTimestamp;
85-
var index = lastSubTable is null ? 0 : lastSubTable.Index + 1;
86-
subTable = new EventSubTable
88+
var startTime = lastSubTable != null ? (lastSubTable.EndTime == lastSubTable.StartTime ? eventTimestamp : lastSubTable.EndTime) : eventTimestamp;
89+
if (eventTimestamp >= startTime)
8790
{
88-
TableName = EventTable,
89-
SubTable = $"{EventTable}_{index}",
90-
Index = index,
91-
StartTime = startTime,
92-
EndTime = startTime + SubTableMillionSecondsInterval
93-
};
91+
var index = lastSubTable is null ? 0 : lastSubTable.Index + 1;
92+
subTable = new EventSubTable
93+
{
94+
TableName = EventTable,
95+
SubTable = $"{EventTable}_{index}",
96+
Index = index,
97+
StartTime = startTime,
98+
EndTime = startTime + SubTableMillionSecondsInterval
99+
};
100+
}
101+
else
102+
{
103+
var firstSubTable = getTask.Result.FirstOrDefault();
104+
var index = firstSubTable.Index - 1;
105+
subTable = new EventSubTable
106+
{
107+
TableName = EventTable,
108+
SubTable = $"{EventTable}_{index}",
109+
Index = index,
110+
StartTime = firstSubTable.StartTime - SubTableMillionSecondsInterval,
111+
EndTime = firstSubTable.StartTime
112+
};
113+
}
94114
try
95115
{
96116
await BuildRepository.CreateEventTable(subTable);

0 commit comments

Comments
 (0)