1313using ShardingCore . Bootstrapers ;
1414using ShardingCore . Core . VirtualDatabase . VirtualDataSources ;
1515using ShardingCore . Core . VirtualDatabase . VirtualTables ;
16+ using ShardingCore . Core . VirtualRoutes . DataSourceRoutes . RouteRuleEngine ;
1617using ShardingCore . Core . VirtualRoutes . TableRoutes ;
1718using ShardingCore . Core . VirtualRoutes . TableRoutes . RouteTails . Abstractions ;
19+ using ShardingCore . Core . VirtualRoutes . TableRoutes . RoutingRuleEngine ;
1820using ShardingCore . Core . VirtualTables ;
1921using ShardingCore . Exceptions ;
2022using ShardingCore . Extensions ;
@@ -37,6 +39,8 @@ public class EFCoreCrud
3739 private readonly IStreamMergeContextFactory < DefaultShardingDbContext > _streamMergeContextFactory ;
3840 private readonly ActualConnectionStringManager < DefaultShardingDbContext > _actualConnectionStringManager ;
3941 private readonly IVirtualDataSource < DefaultShardingDbContext > _virtualDataSource ;
42+ private readonly IDataSourceRouteRuleEngineFactory < DefaultShardingDbContext > _dataSourceRouteRuleEngineFactory ;
43+ private readonly ITableRouteRuleEngineFactory < DefaultShardingDbContext > _tableRouteRuleEngineFactory ;
4044 public EFCoreCrud ( )
4145 {
4246 var services = new ServiceCollection ( ) ;
@@ -119,6 +123,8 @@ public EFCoreCrud()
119123 ShardingContainer . GetService < IStreamMergeContextFactory < DefaultShardingDbContext > > ( ) ;
120124 _actualConnectionStringManager = new ActualConnectionStringManager < DefaultShardingDbContext > ( ) ;
121125 _virtualDataSource = ShardingContainer . GetService < IVirtualDataSource < DefaultShardingDbContext > > ( ) ;
126+ _dataSourceRouteRuleEngineFactory = ShardingContainer . GetService < IDataSourceRouteRuleEngineFactory < DefaultShardingDbContext > > ( ) ;
127+ _tableRouteRuleEngineFactory = ShardingContainer . GetService < ITableRouteRuleEngineFactory < DefaultShardingDbContext > > ( ) ;
122128
123129 }
124130
@@ -146,16 +152,45 @@ public EFCoreCrud()
146152 // var connectionString = _actualConnectionStringManager.GetConnectionString("ds0", false);
147153 // }
148154 //}
149- //[Benchmark]
150- //public async Task ShardingCreateStreamMergeContext()
151- //{
152- // for (int i = 0; i < N; i++)
153- // {
154- // var next = new Random().Next(1000000, 3000000).ToString();
155- // var queryable = _defaultShardingDbContext.Set<Order>().Where(o => o.Id == next);
156- // var firstOrDefaultAsync = _streamMergeContextFactory.Create(queryable, _defaultShardingDbContext);
157- // }
158- //}
155+ [ Benchmark ]
156+ public async Task CreateQueryable ( )
157+ {
158+ for ( int i = 0 ; i < N ; i ++ )
159+ {
160+ var next = new Random ( ) . Next ( 1000000 , 3000000 ) . ToString ( ) ;
161+ var queryable = _defaultShardingDbContext . Set < Order > ( ) . Where ( o => o . Id == next ) ;
162+ }
163+ }
164+ [ Benchmark ]
165+ public async Task DataSourceRouteRuleEngineFactory ( )
166+ {
167+ for ( int i = 0 ; i < N ; i ++ )
168+ {
169+ var next = new Random ( ) . Next ( 1000000 , 3000000 ) . ToString ( ) ;
170+ var queryable = _defaultShardingDbContext . Set < Order > ( ) . Where ( o => o . Id == next ) ;
171+ _dataSourceRouteRuleEngineFactory . Route ( queryable ) ;
172+ }
173+ }
174+ [ Benchmark ]
175+ public async Task TableRouteRuleEngineFactory ( )
176+ {
177+ for ( int i = 0 ; i < N ; i ++ )
178+ {
179+ var next = new Random ( ) . Next ( 1000000 , 3000000 ) . ToString ( ) ;
180+ var queryable = _defaultShardingDbContext . Set < Order > ( ) . Where ( o => o . Id == next ) ;
181+ _tableRouteRuleEngineFactory . Route ( queryable ) ;
182+ }
183+ }
184+ [ Benchmark ]
185+ public async Task ShardingCreateStreamMergeContext ( )
186+ {
187+ for ( int i = 0 ; i < N ; i ++ )
188+ {
189+ var next = new Random ( ) . Next ( 1000000 , 3000000 ) . ToString ( ) ;
190+ var queryable = _defaultShardingDbContext . Set < Order > ( ) . Where ( o => o . Id == next ) ;
191+ var firstOrDefaultAsync = _streamMergeContextFactory . Create ( queryable , _defaultShardingDbContext ) ;
192+ }
193+ }
159194 //[Benchmark]
160195 //public async Task NoRouteParseCache()
161196 //{
@@ -178,24 +213,24 @@ public EFCoreCrud()
178213 // _virtualTable.RouteTo(new ShardingTableRouteConfig(queryable: queryable1));
179214 // }
180215 //}
181- [ Benchmark ]
182- public async Task NoShardingFirstOrDefaultAsync ( )
183- {
184- for ( int i = 0 ; i < N ; i ++ )
185- {
186- var next = new Random ( ) . Next ( 1 , 7000000 ) . ToString ( ) ;
187- var firstOrDefaultAsync = await _defaultDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Id == next ) ;
188- }
189- }
190- [ Benchmark ]
191- public async Task ShardingFirstOrDefaultAsync ( )
192- {
193- for ( int i = 0 ; i < N ; i ++ )
194- {
195- var next = new Random ( ) . Next ( 1 , 7000000 ) . ToString ( ) ;
196- var firstOrDefaultAsync = await _defaultShardingDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Id == next ) ;
197- }
198- }
216+ // [Benchmark]
217+ // public async Task NoShardingFirstOrDefaultAsync()
218+ // {
219+ // for (int i = 0; i < N; i++)
220+ // {
221+ // var next = new Random().Next(1, 7000000).ToString();
222+ // var firstOrDefaultAsync = await _defaultDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Id == next);
223+ // }
224+ // }
225+ // [Benchmark]
226+ // public async Task ShardingFirstOrDefaultAsync()
227+ // {
228+ // for (int i = 0; i < N; i++)
229+ // {
230+ // var next = new Random().Next(1, 7000000).ToString();
231+ // var firstOrDefaultAsync = await _defaultShardingDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Id == next);
232+ // }
233+ // }
199234 //[Benchmark]
200235 //public async Task NoShardingIndexFirstOrDefaultAsync()
201236 //{
@@ -216,120 +251,120 @@ public async Task ShardingFirstOrDefaultAsync()
216251 // var firstOrDefaultAsync = await _defaultShardingDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Id == next);
217252 // }
218253 //}
219- [ Benchmark ]
220- public async Task NoShardingNoIndexFirstOrDefaultAsync ( )
221- {
222- for ( int i = 0 ; i < N ; i ++ )
223- {
224- var firstOrDefaultAsync1 = await _defaultDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 0 ) ;
225- var firstOrDefaultAsync2 = await _defaultDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 999999 ) ;
226- }
227- }
254+ // [Benchmark]
255+ // public async Task NoShardingNoIndexFirstOrDefaultAsync()
256+ // {
257+ // for (int i = 0; i < N; i++)
258+ // {
259+ // var firstOrDefaultAsync1 = await _defaultDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 0);
260+ // var firstOrDefaultAsync2 = await _defaultDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 999999);
261+ // }
262+ // }
228263
229264
230- [ Benchmark ]
231- public async Task ShardingNoIndexFirstOrDefaultAsync ( )
232- {
233- for ( int i = 0 ; i < N ; i ++ )
234- {
235- var firstOrDefaultAsync1 = await _defaultShardingDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 0 ) ;
236- var firstOrDefaultAsync2 = await _defaultShardingDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 999999 ) ;
237- }
238- }
239- [ Benchmark ]
240- public async Task NoShardingNoIndexCountAsync ( )
241- {
242- for ( int i = 0 ; i < N ; i ++ )
243- {
244- var firstOrDefaultAsync1 = await _defaultDbContext . Set < Order > ( ) . CountAsync ( o => o . Amount == 0 ) ;
245- var firstOrDefaultAsync2 = await _defaultDbContext . Set < Order > ( ) . CountAsync ( o => o . Amount == 999999 ) ;
246- }
247- }
265+ // [Benchmark]
266+ // public async Task ShardingNoIndexFirstOrDefaultAsync()
267+ // {
268+ // for (int i = 0; i < N; i++)
269+ // {
270+ // var firstOrDefaultAsync1 = await _defaultShardingDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 0);
271+ // var firstOrDefaultAsync2 = await _defaultShardingDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 999999);
272+ // }
273+ // }
274+ // [Benchmark]
275+ // public async Task NoShardingNoIndexCountAsync()
276+ // {
277+ // for (int i = 0; i < N; i++)
278+ // {
279+ // var firstOrDefaultAsync1 = await _defaultDbContext.Set<Order>().CountAsync(o => o.Amount == 0);
280+ // var firstOrDefaultAsync2 = await _defaultDbContext.Set<Order>().CountAsync(o => o.Amount == 999999);
281+ // }
282+ // }
248283
249284
250- [ Benchmark ]
251- public async Task ShardingNoIndexCountAsync ( )
252- {
253- for ( int i = 0 ; i < N ; i ++ )
254- {
255- var firstOrDefaultAsync1 = await _defaultShardingDbContext . Set < Order > ( ) . CountAsync ( o => o . Amount == 0 ) ;
256- var firstOrDefaultAsync2 = await _defaultShardingDbContext . Set < Order > ( ) . CountAsync ( o => o . Amount == 999999 ) ;
257- }
258- }
259- [ Benchmark ]
260- public async Task NoShardingNoIndexFirstOrDefaultAsync0w ( )
261- {
262- for ( int i = 0 ; i < N ; i ++ )
263- {
264- var firstOrDefaultAsync = await _defaultDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 0 ) ;
265- }
266- }
267- [ Benchmark ]
268- public async Task ShardingNoIndexFirstOrDefaultAsync0w ( )
269- {
270- for ( int i = 0 ; i < N ; i ++ )
271- {
272- var firstOrDefaultAsync = await _defaultShardingDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 0 ) ;
273- }
274- }
275- [ Benchmark ]
276- public async Task NoShardingNoIndexFirstOrDefaultAsync99w ( )
277- {
278- for ( int i = 0 ; i < N ; i ++ )
279- {
280- var firstOrDefaultAsync = await _defaultDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 999999 ) ;
281- }
282- }
283- [ Benchmark ]
284- public async Task ShardingNoIndexFirstOrDefaultAsync99w ( )
285- {
286- for ( int i = 0 ; i < N ; i ++ )
287- {
288- var firstOrDefaultAsync = await _defaultShardingDbContext . Set < Order > ( ) . FirstOrDefaultAsync ( o => o . Amount == 999999 ) ;
289- }
290- }
285+ // [Benchmark]
286+ // public async Task ShardingNoIndexCountAsync()
287+ // {
288+ // for (int i = 0; i < N; i++)
289+ // {
290+ // var firstOrDefaultAsync1 = await _defaultShardingDbContext.Set<Order>().CountAsync(o => o.Amount == 0);
291+ // var firstOrDefaultAsync2 = await _defaultShardingDbContext.Set<Order>().CountAsync(o => o.Amount == 999999);
292+ // }
293+ // }
294+ // [Benchmark]
295+ // public async Task NoShardingNoIndexFirstOrDefaultAsync0w()
296+ // {
297+ // for (int i = 0; i < N; i++)
298+ // {
299+ // var firstOrDefaultAsync = await _defaultDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 0);
300+ // }
301+ // }
302+ // [Benchmark]
303+ // public async Task ShardingNoIndexFirstOrDefaultAsync0w()
304+ // {
305+ // for (int i = 0; i < N; i++)
306+ // {
307+ // var firstOrDefaultAsync = await _defaultShardingDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 0);
308+ // }
309+ // }
310+ // [Benchmark]
311+ // public async Task NoShardingNoIndexFirstOrDefaultAsync99w()
312+ // {
313+ // for (int i = 0; i < N; i++)
314+ // {
315+ // var firstOrDefaultAsync = await _defaultDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 999999);
316+ // }
317+ // }
318+ // [Benchmark]
319+ // public async Task ShardingNoIndexFirstOrDefaultAsync99w()
320+ // {
321+ // for (int i = 0; i < N; i++)
322+ // {
323+ // var firstOrDefaultAsync = await _defaultShardingDbContext.Set<Order>().FirstOrDefaultAsync(o => o.Amount == 999999);
324+ // }
325+ // }
291326
292327
293- [ Benchmark ]
294- public async Task NoShardingNoIndexLikeToListAsync ( )
295- {
296- for ( int i = 0 ; i < N ; i ++ )
297- {
298- var next = new Random ( ) . Next ( 1 , 7000000 ) . ToString ( ) ;
299- var firstOrDefaultAsync = await _defaultDbContext . Set < Order > ( ) . Where ( o => o . Body . Contains ( next ) ) . ToListAsync ( ) ;
300- }
301- }
328+ // [Benchmark]
329+ // public async Task NoShardingNoIndexLikeToListAsync()
330+ // {
331+ // for (int i = 0; i < N; i++)
332+ // {
333+ // var next = new Random().Next(1, 7000000).ToString();
334+ // var firstOrDefaultAsync = await _defaultDbContext.Set<Order>().Where(o => o.Body.Contains(next)).ToListAsync();
335+ // }
336+ // }
302337
303338
304- [ Benchmark ]
305- public async Task ShardingNoIndexLikeToListAsync ( )
306- {
307- for ( int i = 0 ; i < N ; i ++ )
308- {
309- var next = new Random ( ) . Next ( 1 , 7000000 ) . ToString ( ) ;
310- var firstOrDefaultAsync = await _defaultShardingDbContext . Set < Order > ( ) . Where ( o => o . Body . Contains ( next ) ) . ToListAsync ( ) ;
311- }
312- }
313- [ Benchmark ]
314- public async Task NoShardingNoIndexToListAsync ( )
315- {
316- for ( int i = 0 ; i < N ; i ++ )
317- {
318- var next = new Random ( ) . Next ( 1 , 7000000 ) ;
319- var firstOrDefaultAsync = await _defaultDbContext . Set < Order > ( ) . Where ( o => o . Amount == next ) . ToListAsync ( ) ;
320- }
321- }
339+ // [Benchmark]
340+ // public async Task ShardingNoIndexLikeToListAsync()
341+ // {
342+ // for (int i = 0; i < N; i++)
343+ // {
344+ // var next = new Random().Next(1, 7000000).ToString();
345+ // var firstOrDefaultAsync = await _defaultShardingDbContext.Set<Order>().Where(o => o.Body.Contains(next)).ToListAsync();
346+ // }
347+ // }
348+ // [Benchmark]
349+ // public async Task NoShardingNoIndexToListAsync()
350+ // {
351+ // for (int i = 0; i < N; i++)
352+ // {
353+ // var next = new Random().Next(1, 7000000);
354+ // var firstOrDefaultAsync = await _defaultDbContext.Set<Order>().Where(o => o.Amount == next).ToListAsync();
355+ // }
356+ // }
322357
323358
324- [ Benchmark ]
325- public async Task ShardingNoIndexToListAsync ( )
326- {
327- for ( int i = 0 ; i < N ; i ++ )
328- {
329- var next = new Random ( ) . Next ( 1 , 7000000 ) ;
330- var firstOrDefaultAsync = await _defaultShardingDbContext . Set < Order > ( ) . Where ( o => o . Amount == next ) . ToListAsync ( ) ;
331- }
332- }
359+ // [Benchmark]
360+ // public async Task ShardingNoIndexToListAsync()
361+ // {
362+ // for (int i = 0; i < N; i++)
363+ // {
364+ // var next = new Random().Next(1, 7000000);
365+ // var firstOrDefaultAsync = await _defaultShardingDbContext.Set<Order>().Where(o => o.Amount == next).ToListAsync();
366+ // }
367+ // }
333368 //[Benchmark]
334369 //public void ShardingRouteFirstOrDefault()
335370 //{
0 commit comments