LINQ

03/02/2023

Apache Ignite.NET LINQ Provider

Apache Ignite.NET, Ignite SQL API'leri ile entegre bir LINQ saฤŸlayฤฑcฤฑsฤฑ iรงerir. DoฤŸrudan SQL sรถzdizimi ile uฤŸraลŸmaktan kurtulabilir ve LINQ ile C# dilinde sorgular yazabilirsiniz. Ignite LINQ saฤŸlayฤฑcฤฑsฤฑ, daฤŸฤฑtฤฑk joinler, gruplandฤฑrmalar, toplamalar, sฤฑralama ve daha fazlasฤฑ dahil olmak รผzere ANSI-99 SQL'in tรผm รถzelliklerini destekler.

Installation

  • Ignite binary daฤŸฤฑtฤฑmฤฑnฤฑ kullanฤฑyorsanฤฑz: Apache.Ignite.Linq.dll dosyasฤฑna bir referans ekleyin

  • NuGet kullanฤฑyorsanฤฑz: Install-Package Apache.Ignite.Linq

Configuration

SQL dizinlerinin normal SQL sorgularฤฑyla aynฤฑ ลŸekilde yapฤฑlandฤฑrฤฑlmasฤฑ gerekir, ayrฤฑntฤฑlar iรงin Definin Indexes bรถlรผmรผne bakฤฑn.

Usage

Apache.Ignite.Linq.CacheLinqExtensions sฤฑnฤฑfฤฑ, LINQ saฤŸlayฤฑcฤฑsฤฑ iรงin bir giriลŸ noktasฤฑdฤฑr. AsCacheQueryable yรถntemini รงaฤŸฤฑrarak bir Ignite cacheโ€™i รผzerinden sorgulanabilir bir instance edinin ve รผzerinde LINQ kullanฤฑn:

ICache<EmployeeKey, Employee> employeeCache = ignite.GetCache<EmployeeKey, Employee>(CacheName);

IQueryable<ICacheEntry<EmployeeKey, Employee>> queryable = cache.AsCacheQueryable();

Employee[] interns = queryable.Where(emp => emp.Value.IsIntern).ToArray();

LINQ'yu AsCacheQueryable() รถฤŸesini รงaฤŸฤฑrmadan doฤŸrudan cache instanceโ€™ฤฑnda kullanabilirsiniz. Ancak bu, tรผm cache veri kรผmesini local olarak getiren ve iลŸleyen, รงok verimsiz olan LINQ to Objects sorgusuyla sonuรงlanacaktฤฑr.

Introspection

Ignite LINQ saฤŸlayฤฑcฤฑsฤฑ, aslฤฑnda ICache.QueryFields kullanฤฑr. Expressionlarฤฑ gerรงekleลŸtirmeden รถnce herhangi bir noktada (ToList, ToArray, vb.) IQueryable'ฤฑ ICacheQueryable'a รงevirerek รผretilen SqlFieldsQuery'i inceleyebilirsiniz:

Projections

Basit Where sorgularฤฑ ICacheEntry nesneleri รผzerinde รงalฤฑลŸฤฑr. Key, Value veya Key ve Value alanlarฤฑndan herhangi birini ayrฤฑ ayrฤฑ seรงebilirsiniz. Anonim tรผrler kullanฤฑlarak birden รงok alan seรงilebilir.

Compiled Queries

LINQ saฤŸlayฤฑcฤฑsฤฑ, expression parsing ve SQL generationโ€™un neden olduฤŸu belirli ek yรผke neden olur. Sฤฑk kullanฤฑlan sorgular iรงin bu ek yรผkรผ ortadan kaldฤฑrmak isteyebilirsiniz.

Apache.Ignite.Linq.CompiledQuery sฤฑnฤฑfฤฑ, sorgu derlemesini destekler. DerlenmiลŸ sorguyu temsil edecek yeni bir delegate oluลŸturmak iรงin Compile methodunu รงaฤŸฤฑrฤฑn. Tรผm sorgu parametreleri, delegate parametrelerinde olmalฤฑdฤฑr.

Compilde Query Performance Benchmark;

Joins

LINQ saฤŸlayฤฑcฤฑsฤฑ, birkaรง cacheโ€™e/tabloya ve nodeโ€™a yayฤฑlan JOIN'leri destekler.

Contains

ICollection.Contains desteklenir ve bu, bir Idโ€™ye gรถre veri almak istediฤŸimizde yararlฤฑdฤฑr, รถrneฤŸin:

Bu sorgu โ€ฆ where Id IN (?, ?, ?) komutuna รงevrilir. Ancak, deฤŸiลŸken argรผman numarasฤฑ nedeniyle bu formun compiled querylerde kullanฤฑlamayacaฤŸฤฑnฤฑ unutmayฤฑn. Daha iyi bir alternatif, ids listesinde Join kullanmaktฤฑr:

Bu LINQ sorgusu geรงici bir tablo birleลŸimine รงevrilir: select _T0._KEY, _T0._VAL from "person".Person as _T0 inner join table (F0 int = ?) _T1 on (_T1.F0 = _T0.ID) ve tek bir array parametresine sahiptir, bรถylece plan dรผzgรผn bir ลŸekilde cacheโ€™e alฤฑnabilir ve compiled querylerde de izin verilir.

Supported SQL Functions

AลŸaฤŸฤฑda, Ignite LINQ saฤŸlayฤฑcฤฑsฤฑ tarafฤฑndan desteklenen .NET methodlarฤฑnฤฑn ve bunlarฤฑn SQL eลŸdeฤŸerlerinin bir listesi bulunmaktadฤฑr.

String.Length
LENGTH

String.ToLower

LOWER

String.ToUpper

UPPER

String.StartsWith("foo")

LIKE 'foo%'

String.EndsWith("foo")

LIKE '%foo'

String.Contains("foo")

LIKE '%foo%'

String.IndexOf("abc")

INSTR(MyField, 'abc') - 1

String.IndexOf("abc", 3)

INSTR(MyField, 'abc', 3) - 1

String.Substring("abc", 4)

SUBSTRING(MyField, 4 + 1)

String.Substring("abc", 4, 7)

SUBSTRING(MyField, 4 + 1, 7)

String.Trim()

TRIM

String.TrimStart()

LTRIM

String.TrimEnd()

RTRIM

String.Trim('x')

TRIM(MyField, 'x')

String.TrimStart('x')

LTRIM(MyField, 'x')

String.TrimEnd('x')

RTRIM(MyField, 'x')

String.Replace

REPLACE

String.PadLeft

LPAD

String.PadRight

RPAD

Regex.Replace

REGEXP_REPLACE

Regex.IsMatch

REGEXP_LIKE

Math.Abs

ABS

Math.Acos

ACOS

Math.Asin

ASIN

Math.Atan

ATAN

Math.Atan2

ATAN2

Math.Ceiling

CEILING

Math.Cos

COS

Math.Cosh

COSH

Math.Exp

EXP

Math.Floor

FLOOR

Math.Log

LOG

Math.Log10

LOG10

Math.Pow

POWER

Math.Round

ROUND

Math.Sign

SIGN

Math.Sin

SIN

Math.Sinh

SINH

Math.Sqrt

SQRT

Math.Tan

TAN

Math.Tanh

TANH

Math.Truncate

TRUNCATE

DateTime.Year

YEAR

DateTime.Month

MONTH

DateTime.Day

DAY_OF_MONTH

DateTime.DayOfYear

DAY_OF_YEAR

DateTime.DayOfWeek

DAY_OF_WEEK - 1

DateTime.Hour

HOUR

DateTime.Minute

MINUTE

DateTime.Second

SECOND

Last updated

Was this helpful?