Building Resilient .NET APIs: 101.2 — Sieve vs. Gridify: The Ultimate .NET Pagination and Filtering Showdown
اگر با Elasticsearch کار کرده باشید میدانید که تولید Elasticsearch DSL Query کمی پیچیده است و عموما باید به صورت manual این Query هارو تولید کنید.
با استفاده از این پکیج برای تولید این Queryها میتوانید از syntax پشتیبانی شده در Gridify استفاده کنید که کار ساخت Query برای Elasticsearch را ساده میکند.
مثال:
await client.SearchAsync<User>(s => s .Index("users") .ApplyFiltering("emailAddress = John"));
query زیر را تولید میکند:
GET users/_search { "query": { "term": { "emailAddress.keyword": { "value": "test@test.com" } } } }
Method | Mean | Error | StdDev | MValue | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
---|---|---|---|---|---|---|---|---|---|---|
Native Linq | 545.8 us | 1.98 us | 1.85 us | 2.000 | 1.00 | 0.00 | 7.3242 | 3.4180 | - | 15 KB |
Gridify | 573.7 us | 3.88 us | 3.24 us | 2.000 | 1.05 | 0.01 | 13.6719 | 4.3945 | - | 29 KB |
Dynamic Linq | 781.1 us | 6.14 us | 5.74 us | 2.000 | 1.43 | 0.01 | 49.8047 | - | - | 102 KB |
Sieve | 1,726.0 us | 24.42 us | 21.65 us | 2.000 | 3.16 | 0.04 | 25.3906 | 11.7188 | - | 55 KB |
یکی از دغدغهها هنگام نوشتن یک API فیلتر کردن , سورت کردن یا دریافت اطلاعات به صورت صفحه ایست. چراکه به طور مثال برای اعمال فیلتر روی اطلاعات, ورودی ما یک رشته `string` است و تبدیل این رشته به یک query کار ساده ای نیست و نیاز دارد تا برای تک تک فیلدهای لیست به صورت جداگدانه منطق ارتباطی آن نوشته شود. یا برای داشتن لیستی با قابلیت Paging نیاز داریم تا ابتدا تعداد کل رکوردها را از دیتابیس دریافت کرده سپس بعد از محاسبه محدوده صفحه مورد نظر اطلاعات را برگردانیم.
با استفاده از Gridify میتوانیم به سادهترین شکل این گونه عملیات را در برنامههای خود انجام دهیم و بسیاری از مشکلات را با کمترین هزینه حل کنیم. (بخصوص زمانیکه از Web-API و SPA استفاده میکنیم)