برنامه نویسی

کد نویسی زبان برنامه نویسی در یک شبکه

چی؟ برنامه نویسی برنامه نویسی در یک شبکه؟

بله ، شما خوانده اید که درست ، SPL (زبان فرآیند ساختاری) یک زبان برنامه نویسی است که در یک شبکه کدهای می کند و مخصوصاً برای پردازش داده های ساختاری استفاده می شود.

ما می دانیم که تقریباً همه زبانهای برنامه نویسی کد را به عنوان متن می نویسند ، بنابراین کد SPL به چه شکلی است و تفاوت بین کد سبک شبکه و کد به سبک متن چیست؟ بیایید ابتدا به محیط برنامه نویسی SPL نگاهی بیندازیم.

کد در یک شبکه

شرح تصویر
قسمت میانی کد شبکه SPL است.

مزایای نوشتن کد در یک شبکه چیست؟

هنگام برنامه نویسی ، ما همیشه باید از متغیرهای میانی استفاده کنیم و آنها را نامگذاری کنیم. با این حال ، هنگامی که ما در SPL برنامه ریزی می کنیم ، نامگذاری متغیرها اغلب غیر ضروری است. SPL به ما اجازه می دهد تا نام سلول قبلی را مستقیماً در مراحل بعدی ارجاع دهیم و نتیجه محاسبه سلول (مانند A1) را بدست آوریم. =A2.align@a(A6:~,date(Datetime))بشر به این ترتیب ، از مغز ما برای تعریف متغیرها جلوگیری می شود (همانطور که باید به متغیر یک نام معنی دار داده شود ، که آزار دهنده است). البته ، SPL همچنین از متغیرهای تعیین کننده پشتیبانی می کند ، اما نیازی به تعریف نوع متغیر نیست و از این رو می توانیم یک متغیر را نامگذاری کنیم و مستقیماً از آن استفاده کنیم ، به عنوان مثال: =cod=A4.new(ID:Commodity,0:Stock,:OosTime,0:TotalOosTime)بشر علاوه بر این ، ما می توانیم به طور موقت یک متغیر را در بیان تعریف کنیم ، به عنوان مثال: = A1.group@o(a+=if(x,1,0))بشر

ممکن است نگران باشید که هنگام استفاده از نام سلول به عنوان نام متغیر ، مشکلی ایجاد شود ، یعنی نام سلول (موقعیت) پس از درج یا حذف یک ردیف و ستون تغییر می کند و نام اصلی ارجاع می شود. نگران نباشید ، این مشکل در حال حاضر در IDE SPL حل شده است و هنگام درج یا حذف یک ردیف ، نام سلول به طور خودکار تغییر می کند. به عنوان مثال ، هنگام وارد کردن یک ردیف ، نام سلول ها (نام های زیر خط قرمز) بر این اساس تغییر می کند ، آیا راحت است؟

شرح تصویر
کد به سبک شبکه باعث می شود احساس کنیم که کد بسیار مرتب است. از آنجا که کد در سلول ها نوشته شده است ، به طور طبیعی تراز شده است. به عنوان مثال ، تورفتگی سلولها نشان می دهد که این یک بلوک کد است (عبارت برای حلقه از A12 به A18) ، و هر اصلاح کننده ای لازم نیست ، و بنابراین به نظر می رسد بسیار مرتب و بصری است. علاوه بر این ، هنگامی که کد موجود در یک سلول به دلیل پردازش یک کار پیچیده طولانی است ، کد فقط یک سلول را اشغال می کند و بر ساختار کل کد تأثیر نمی گذارد (این امر بر خواندن کدهای سمت راست و پایین تأثیر نمی گذارد زیرا کد در یک سلول خاص حتی از مرز سلول فراتر نمی رود حتی اگر خیلی طولانی باشد). در مقابل ، کد به سبک متن این مزیت را ندارد زیرا باید کل کد را نمایش دهد.

علاوه بر این ، لازم به ذکر است که یک دکمه فروپاشی در ردیف وجود دارد که در آن حلقه برای آن قرار دارد ، این دکمه می تواند کل بلوک کد را سقوط کند. اگرچه چنین دکمه ای در IDE از چندین زبان برنامه نویسی به سبک متن موجود است ، اما باعث می شود کل کد مرتب تر و خواندن هنگام استفاده در SPL باشد.

شرح تصویر
حال بیایید به عملکرد اشکال زدایی نگاه کنیم. در IDE SPL ، نوار ابزار فوقانی فراهم می کند اجرای/اشکال زدایی چندگانه دکمه ها ، از جمله Run ، Debug ، Run to Carsor ، Step In و همچنین سایر دکمه ها مانند Set Breaks ، محاسبه سلول فعلی ، که می تواند به طور کامل نیازهای برنامه ویرایش و اشکال زدایی را برآورده کند. در هر مرحله یک سلول را اجرا می کند ، نقطه شکست کد بسیار واضح است. در مقابل ، اجرای/اشکال زدایی کد به سبک متن متفاوت است ، ممکن است در یک خط اقدامات مختلفی وجود داشته باشد ، که تشخیص آن آسان نیست ، و وقتی برخی از اظهارات خیلی طولانی هستند و باید به راحتی در آن قرار گرفتند و باید به چند خط تقسیم شود.

شرح تصویر
همچنین باید به پانل نتیجه در سمت راست از آنجا که SPL برنامه نویسی به سبک شبکه را اتخاذ می کند ، نتیجه هر مرحله (سلول) پس از اجرای/اشکال زدایی حفظ می شود ، که به برنامه نویس اجازه می دهد تا نتیجه محاسبه آن مرحله (سلول) را در زمان واقعی با کلیک بر روی یک سلول مشاهده کند ، بنابراین آیا محاسبه صحیح است یا نه ، و به راحتی می توان به عنوان یک نتیجه از زمان حذف هر نتیجه ای که نیاز به از بین بردن نتیجه را از دست داد و نتیجه آن نتیجه را از بین برد و نتیجه را به دست آورد و نتیجه را به نتیجه می رساند و نتیجه گیری را به دست می آورد.

شرح تصویر
مجموعه نتیجه چند لایه

این مزایا در برنامه نویسی به سبک شبکه متوقف نمی شود

نوشتن کد در سلول ها برنامه نویسی را راحت می کند ، به عنوان مثال ، ویرایش یا اشکال زدایی آسان تر است. با این حال ، نوشتن هر جمله را ساده نمی کند. بیایید نگاهی به خود SPL Syntax بیندازیم.

هنگام پردازش داده ها ، به ویژه سناریوی پیچیده ، ما قطعاً از حلقه و شاخه استفاده خواهیم کرد که عملکردهای نسبتاً اساسی یک زبان برنامه نویسی هستند. البته SPL چنین ویژگی هایی را ارائه می دهد. علاوه بر این ، SPL ویژگی های بسیاری را ارائه می دهد ، مانند نحو گزینه ، پارامترهای چند لایه و نحو Advanced Lambdaبشر

گزینه
هر زبان برنامه نویسی تعداد زیادی از کارکردهای داخلی کتابخانه دارد و عملکردهای کتابخانه ای ثروتمندتر است ، اجرای عملکرد برای ما راحت تر است. توابع با نام یا پارامتر مختلف (و نوع پارامتر) متمایز می شوند. با این حال ، هنگامی که تشخیص حتی در مورد نوع پارامتر غیرممکن است ، باید صریحاً یک پارامتر گزینه اضافه کنیم تا به کامپایلر یا مترجم بگوییم که چه کاری می خواهیم انجام دهیم. به عنوان مثال ، پردازش فایلها در جاوا شامل چندین بازپرداخت می شود ، وقتی می خواهیم پرونده ای ایجاد کنیم که وجود ندارد ، کد این است:

Files.write(path, DUMMY_TEXT.getBytes(), StandardOpenOption.CREATE_NEW);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

وقتی می خواهیم یک فایل موجود را باز کنیم و یک مورد جدید ایجاد کنیم که وجود ندارد ، کد این است:

Files.write(path, DUMMY_TEXT.getBytes(), StandardOpenOption.CREATE);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

هنگامی که ما می خواهیم داده ها را به یک پرونده اضافه کنیم و اطمینان حاصل کنیم که داده ها در مورد خرابی سیستم از دست نمی دهند ، کد این است:

Files.write(path,ANOTHER_DUMMY_TEXT.getBytes(), StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.SYNC)

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

همانطور که از کدهای فوق می بینیم که اگر می خواهیم عملکردهای مختلفی را با همان عملکرد پیاده سازی کنیم ، باید گزینه های مختلفی را انتخاب کنیم. معمولاً یک گزینه به عنوان یک پارامتر در نظر گرفته می شود ، اما این امر منجر به پیچیدگی در استفاده می شود و اغلب باعث می شود که ما در مورد هدف واقعی این پارامترها اشتباه بگیریم و برای برخی از توابع با تعداد ناشناخته پارامترها ، راهی برای نمایش گزینه با پارامتر وجود ندارد.

SPL بسیار منحصر به فرد ارائه می دهد گزینه، که به توابع با عملکرد مشابه اجازه می دهد تا یک نام عملکرد را به اشتراک بگذارند ، و تفاوت بین توابع با گزینه عملکرد متمایز است ، بنابراین واقعاً نقش عملکرد عملکرد را بازی می کند. از نظر شکل بیان ، این یک طبقه بندی دو لایه است و هم به یاد می آورد و هم از آن بسیار راحت استفاده می کند. به عنوان مثال ، از عملکرد POS برای جستجوی موقعیت بستر در یک رشته والدین استفاده می شود ، اگر می خواهیم از پشت به جلو جستجو کنیم ، می توانیم از گزینه z استفاده کنیم:

pos@z("abcdeffdef","def")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای انجام یک جستجوی حساس به مورد ، می توانیم از گزینه C استفاده کنیم:

pos@c("abcdef","Def")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از دو گزینه نیز می توان در ترکیب استفاده کرد:

pos@zc("abcdeffdef","Def")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از گزینه عملکرد ، ما فقط باید با عملکردهای کمتری آشنا شویم. هنگامی که ما از همان عملکرد با عملکردهای مختلف استفاده می کنیم ، فقط باید یک گزینه مربوطه را پیدا کنیم ، معادل آن است که SPL توابع را به لایه ها طبقه بندی می کند ، و این باعث می شود جستجوی و استفاده راحت تر شود.

پارامتر آبشار
پارامترهای برخی از توابع بسیار پیچیده است و ممکن است به چندین لایه تقسیم شود. با توجه به این وضعیت ، زبانهای برنامه نویسی معمولی راه حل نحوی ویژه ای ندارند و فقط می توانند شیء داده ساختاری چند لایه تولید کنند و سپس آنها را منتقل کنند ، که بسیار مشکل ساز است. به عنوان مثال ، کد زیر انجام یک عملیات پیوستن در جاوا است (به داخل جدول سفارشات و جدول کارمندان بپیوندید):

Map EIds = Employees.collect(Collectors.toMap(Employee::EId, Function.identity()));
record OrderRelation(int OrderID, String Client, Employee SellerId, double Amount, Date OrderDate){}
Stream ORS=Orders.map(r -> {
   Employee e=EIds.get(r.SellerId);
   OrderRelation or=new OrderRelation(r.OrderID,r.Client,e,r.Amount,r.OrderDate);
   return or;
}).filter(e->e.SellerId!=null);

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مشاهده می شود که برای انجام ارتباط با یک پارامتر چند لایه (بخش) برای انجام ارتباط ، که خواندن آن دشوار است ، چه رسد به نوشتن. اگر محاسبات کمی بیشتر انجام دهیم (محاسبات دیگر اغلب بعد از ارتباط انجام می شود) ، به عنوان مثال ، کارمند را گروه بندی کنید.

Mapc=ORS.collect(Collectors.groupingBy(r->r.SellerId.Dept,Collectors. .summarizingDouble(r->r.Amount)));

for(String dept:c.keySet()){
 DoubleSummaryStatistics r =c.get(dept);
 System.out.println("group(dept):"+dept+" sum(Amount):"+r.getSum());
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نیازی به توضیح بیشتر در مورد پیچیدگی چنین عملکردی نیست زیرا برنامه نویسان تجربه عمیقی دارند. در مقابل ، SQL بصری تر و ساده تر است.

select Dept,sum(Amount) from Orders r inner join Employee e on r.SellerId=e. SellerId group by Dept

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

SQL برای تقسیم محاسبه به چندین بخش ، از برخی کلمات کلیدی (از ، پیوستن و غیره) استفاده می کند ، که می تواند به عنوان یک پارامتر چند لایه درک شود. چنین پارامترهایی فقط به عنوان انگلیسی برای خواندن آسان مبدل شده اند. با این حال ، این روش بسیار کمتر جهانی است ، زیرا باید برای هر بیانیه کلمات کلیدی ویژه ای را انتخاب کند و در نتیجه ساختار بیانیه متناقض ایجاد شود.

به جای استفاده از کلمه کلیدی برای جدا کردن پارامترهای مانند SQL ، و لانه سازی چندین لایه مانند جاوا ، Spl Creative Inventers پارامتر آبشاربشر SPL مشخص می کند که سه لایه از پارامترها پشتیبانی می شوند و به ترتیب توسط قسمت های نیمه رنگ ، کاما و روده بزرگ از هم جدا می شوند. نیمه رنگ نشان دهنده سطح اول است ، و پارامترهای جدا شده توسط نیمه رنگ یک گروه را تشکیل می دهند. اگر در این گروه لایه دیگری از پارامتر وجود دارد ، آنها را با کاما جدا کنید و اگر پارامتر لایه سوم در این گروه وجود دارد ، آنها را با روده بزرگ جدا کنید. برای اجرای محاسبه انجمن فوق در SPL ، کد این است:

join(Orders:o,SellerId ; Employees:e,EId).groups(e.Dept;sum(o.Amount))

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این کد ساده و سر راست است و هیچ لایه ای از تو در تو و ساختار بیانیه متناقض ندارد. تمرین نشان می دهد که سه لایه اساساً می توانند نیاز را برآورده کنند ، ما به سختی رابطه پارامترهایی را برآورده می کنیم که در سه لایه به وضوح قابل توصیف نیست.

نحو Lambda پیشرفته
ما می دانیم که نحو Lambda می تواند برنامه نویسی را ساده کند ، برخی از زبان های برنامه نویسی شروع به پشتیبانی از این نحو کرده اند. به عنوان مثال ، شمارش تعداد رشته های خالی در Java8 یا نسخه بالاتر می تواند مانند این کدگذاری شود:

Liststrings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
long count = strings.stream().filter(string -> string.isEmpty()).count();

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این بیان “(پارامتر)-> عملکرد بدنه” می تواند تعریف عملکرد ناشناس را ساده کند و استفاده از آن آسان است.

با این وجود ، برای برخی از محاسبات کمی پیچیده ، کد طولانی تر خواهد بود. به عنوان مثال ، یک محاسبه گروه بندی و جمع بندی را در دو زمینه انجام دهید:

Calendar cal=Calendar.getInstance();

Map
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این کد ، هر نام فیلدی قبل از نام جدول ، یعنی “نام جدول. نام. نام.” و نام جدول نمی تواند حذف شود. نحو عملکرد ناشناس پیچیده است و با افزایش میزان کد ، پیچیدگی به سرعت افزایش می یابد. دو کارکرد ناشناس یک کد تو در تو را تشکیل می دهند که درک آن سخت تر است. اجرای یک گروه بندی و محاسبه جمع آوری شامل چندین کارکرد و کتابخانه ها ، از جمله گروه بندی ، جمع آوری ، جمع کننده ها ، خلاصه کردن ، DoubleMarmaryStatistics و غیره خواهد بود ، پیچیدگی بسیار زیاد است.

SPL همچنین از نحو Lambda پشتیبانی می کند ، و درجه پشتیبانی کاملاً نسبت به سایر زبانها مانند جاوا است. حال بیایید محاسبات فوق را در SPL انجام دهیم.

تعداد رشته های خالی را بشمارید:

=["abc", "", "bc", "efg", "abcd","", "jkl"].count(~=="")

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

SPL به طور مستقیم A. (x) را ساده می کند. با این حال ، به نظر نمی رسد که این کد با کد جاوا تفاوت زیادی داشته باشد. بیایید یک محاسبه دیگر را ببینیم:

=Orders.groups(year(OrderDate),Client; sum(Amount),count(1))
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تفاوت را می بینید؟ هنگام انجام گروه بندی و محاسبه جمع آوری در SPL ، مزایای بسیاری وجود دارد: i) نیازی به تعریف ساختار داده از قبل نیست. ب) در کل کد هیچ کارکرد اضافی وجود ندارد. iii) استفاده از مبلغ و شمارش ساده و آسان برای درک است ، حتی درک آن یک عملکرد ناشناس تو در تو نیست.

بیایید به مثال دیگری نگاه کنیم:

مجموعه ای وجود دارد که در آن فروش یک شرکت از ژانویه تا دسامبر ذخیره می شود. بر اساس این مجموعه ، ما می توانیم محاسبات زیر را انجام دهیم:

شرح تصویر
A2: داده های ماه های یکنواخت را فیلتر کنید. A3: ارزش رشد فروش ماهانه را محاسبه کنید.

در اینجا ما از # و [-1]، اولی شماره توالی فعلی را نشان می دهد ، و دومی به معنای مراجعه به عضو قبلی است. به همین ترتیب ، اگر می خواهیم عضو فعلی را با عضو بعدی مقایسه کنیم ، می توانیم از آن استفاده کنیم [1]بشر نماد #، [x]، همراه با ~ (عضو فعلی) همان چیزی هستند که SPL را در تقویت نحو لامبدا بی نظیر می کنند. با استفاده از این نمادها ، هر محاسبه ای بدون اضافه کردن تعریف پارامتر دیگر قابل اجرا است و توانایی توضیحات قوی تر می شود و نوشتن و درک آن آسان تر است.

گزینه عملکرد ، پارامترهای چند لایه و نحو پیشرفته Lambda جنبه دیگری است که SPL را از هم جدا می کند.

توانایی محاسبات داده های ساختاری قابل مقایسه با SQL

ویژگی های کد نویسی و کد به سبک شبکه SPL (نحو عملکرد ، پارامتر چند لایه ، نحو Lambda) SPL را جالب می کند. با این حال ، اختراع SPL برای جلب توجه نیست بلکه پردازش داده ها به طور کارآمد است. برای این منظور ، SPL یک شیء داده ساختاری تخصصی را ارائه می دهد: دنباله جدول (ضبط) و کتابخانه محاسبات غنی را بر اساس دنباله جدول ارائه می دهد. علاوه بر این ، SPL از ساختار داده های پویا پشتیبانی می کند ، که باعث می شود SPL دارای همان توانایی پردازش داده های ساختاری کامل مانند SQL باشد.

در مقابل ، جاوا ، به عنوان یک زبان کامپایل شده ، به دلیل عدم وجود شیء داده های ساختاری لازم ، در محاسبه داده ها بسیار دست و پا گیر است. علاوه بر این ، از آنجا که جاوا از ساختار داده پویا پشتیبانی نمی کند ، داده ها نمی توانند در حین محاسبه به صورت پویا تولید شوند و باید از قبل تعریف شوند ، این مشکل حتی پس از ظهور جریان به خوبی حل نشده است. به طور خلاصه ، این کاستی ها همه به این دلیل است که پایه جاوا پشتیبانی کافی را ارائه نمی دهد.

SPL توابع محاسبه غنی را فراهم می کند و به ما امکان می دهد داده های ساختاری را به راحتی محاسبه کنیم. توابع شامل: اما محدود به:

=Orders.sort(Amount)   // sort

=Orders.select(Amount*Quantity>3000 && like(Client,"*S*"))   // filter

=Orders.groups(Client; sum(Amount))   // group

=Orders.id(Client)   // distinct

=join(Orders:o,SellerId ; Employees:e,EId)   // join

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

حال بیایید یک مثال مرتب سازی دو زمینه ای را ببینیم:

شرح تصویر
در این کد ، t به این معنی است که ردیف اول به عنوان نام فیلد خوانده می شود و ردیف های بعدی مستقیماً با نام فیلد به جای شیء داده محاسبه می شوند. -کلیت به معنی نظم معکوس است.

این کد همچنین می تواند در یک خط بر فرض عدم تأثیرگذاری بر خواندن نوشته شود ، که کد را کوتاه تر می کند.

=file("Orders.txt").import@t().sort(-Client, Amount)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بیایید مثال را در بخش قبلی به یاد بیاوریم. هنگامی که جاوا یک محاسبه گروه بندی و جمع آوری را در دو قسمت انجام می دهد ، باید یک کد طولانی تو در تو در تو بنویسد ، این باعث افزایش هزینه یادگیری و استفاده می شود. برای همان محاسبه ، برنامه نویسی در SPL همان کد نویسی در SQL است ، خواه برای گروه بندی یک قسمت یا چندین قسمت باشد:

=Orders.groups(year(OrderDate),Client; sum(Amount))
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

به طور مشابه ، برای محاسبه پیوستن به درونی (سپس تجمع) ، برنامه نویسی در SPL بسیار ساده تر از سایر زبانهای سطح بالا است:

=join(Orders:o,SellerId ; Employees:e,EId).groups(e.Dept; sum(o.Amount))

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مشابه SQL ، SPL می تواند نوع ارتباط را با اصلاحات اندک تغییر دهد و نیازی به اصلاح کدهای دیگر نیست. به عنوان مثال ، بپیوندید@1 به معنای پیوستن به سمت چپ است ، و به@f به معنای پیوستن کامل بپیوندید.

اشیاء و كتابخانه های داده غنی باعث می شوند SPL نه تنها توانایی پردازش داده ها را با SQL قابل مقایسه داشته باشند ، بلكه برخی از ویژگی های خوب زبانهای سطح بالا (مانند محاسبات رویه ای) را به ارث می برند ، بنابراین پردازش داده ها را برای SPL آسان می كنند.

توانایی های محاسباتی که از SQL فراتر می رود

از آنچه در بالا بحث کردیم (برنامه نویسی جالب به سبک شبکه ، ویژگی هایی مانند نحو گزینه و اشیاء داده های ساختاری کامل و کتابخانه) ، ما می دانیم که SPL دارای توانایی پردازش داده های ساختاری قابل مقایسه با SQL است ، به برنامه نویسان اجازه می دهد تا در صورت عدم وجود پایگاه داده ، بسیاری از کارهای پردازش داده های ساختاری و محاسبات را انجام دهند.

سپس ، آیا SPL صرفاً نقش “SQL” را بدون بانک اطلاعاتی ایفا می کند؟

نه واقعاً! توانایی SPL بیش از این است. در حقیقت ، SPL از نظر محاسبه داده های ساختاری مزایای بسیاری نسبت به SQL دارد.

در عمل ، ما اغلب با برخی از سناریوهایی که کدگذاری آن در SQL دشوار است ، ملاقات می کنیم و کد SQL SQL در سطح چندگانه با بیش از هزار خط بسیار متداول است. برای چنین سناریوهایی ، کدگذاری در SQL نه تنها دشوار است ، بلکه اصلاح و نگهداری نیز آسان نیست. چنین کد SQL طولانی و مشکل ساز است.

چرا این اتفاق می افتد؟

این به این دلیل است که SQL از ویژگی های خاصی به خوبی پشتیبانی نمی کند ، یا حتی به هیچ وجه پشتیبانی نمی کند. بیایید به چند نمونه برای مقایسه SPL و SQL نگاه کنیم.

محاسبات سفارش داده شده

حداکثر تعداد روزهای معاملاتی را که یک سهام بر اساس جدول سوابق معاملات سهام افزایش می یابد ، محاسبه کنید.

برنامه نویسی در SQL:

select max(continuousDays)-1
from (select count(*) continuousDays
   from (select sum(changeSign) over(order by tradeDate) unRiseDays
   from (select tradeDate,
     case when closePrice>lag(closePrice) over(order by tradeDate)
     then 0 else 1 end changeSign
     from stock) )
group by unRiseDays)

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این کد 3 لایه لانه می کند. در مرحله اول ، هر رکورد را با یک پرچم در حال افزایش یا در حال سقوط از طریق عملکرد پنجره علامت گذاری کنید (اگر قیمت افزایش یابد ، در غیر این صورت 1 را علامت گذاری کنید) ، و سپس با تاریخ جمع می شوید تا فواصل خود را با همان پرچم در حال افزایش بدست آورید (اگر قیمت افزایش نشود ، مقدار انباشته تغییر می کند) و در نهایت گروه با پرچم ، شمارش می کنید و حداکثر مقدار را می خواهیم.

در مورد این کد چه احساسی دارید؟ فکر می کنید این مسئله پرخاشگر است؟ آیا درک مدتی طول می کشد؟ در حقیقت ، این یک کار بسیار پیچیده نیست ، اما حتی با این وجود ، کدگذاری/خواندن بسیار دشوار است. چرا این اتفاق می افتد؟ این واقعیت است که مجموعه SQL بدون هماهنگی است و اعضای مجموعه با شماره دنباله (یا موقعیت نسبی) قابل دسترسی نیستند. علاوه بر این ، SQL عملکرد گروه بندی سفارش داده شده را ارائه نمی دهد. اگرچه برخی از پایگاه داده ها از عملکرد پنجره و عملیات مرتبط با سفارش تا حدی پشتیبانی می کنند ، اما به اندازه کافی به اندازه کافی نیست (مانند این مثال).

در واقع ، این کار می تواند به روشی ساده تر اجرا شود: مرتب سازی بر اساس تاریخ ؛ قیمت روز را با آن روز قبل (عملکرد مرتبط با سفارش) مقایسه کنید و در صورت افزایش قیمت 1 را اضافه کنید ، در غیر این صورت ارزش فعلی را به عنوان 0 تنظیم کنید. حداکثر مقدار را پیدا کنید.

SPL به طور مستقیم از مجموعه داده های سفارش داده شده پشتیبانی می کند ، و به طور طبیعی از عملیات مربوط به سفارش پشتیبانی می کند و به ما امکان می دهد مطابق با تفکر طبیعی کدگذاری کنیم:

شرح تصویر
با حمایت از عملکرد سفارش داده شده و محاسبات رویه ای (مزیت جاوا) ، بیان SPL بسیار آسان است و نوشتن و درک آن آسان است.

حتی ما از فکر کردن راه حل فوق SQL برای کدگذاری در SPL پیروی می کنیم ، آسان تر خواهد بود.

stock.sort(trade_date).group@i(close_price
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این کد هنوز از ویژگی نظم استفاده می کند. هنگامی که یک رکورد با شرایط روبرو می شود (قیمت سهام افزایش نمی یابد) ، گروه جدیدی تولید می شود و هر بازه افزایش در یک گروه جداگانه قرار می گیرد. سرانجام ، ما فقط باید تعداد اعضای گروه را با حداکثر اعضای محاسبه کنیم. اگرچه تفکر همانند SQL است ، اما کد بسیار ساده تر است.

درک گروه بندی

آخرین بازه ورود به هر کاربر را بر اساس جدول ضبط ورود به سیستم کاربر لیست کنید:

برنامه نویسی در SQL:

WITH TT AS
 (SELECT RANK() OVER(PARTITION BY uid ORDER BY logtime DESC) rk, T.* FROM t_loginT)
SELECT uid,(SELECT TT.logtime FROM TT where TT.uid=TTT.uid and TT.rk=1)
 -(SELET TT.logtim FROM TT WHERE TT.uid=TTT.uid and TT.rk=2) interval
FROM t_login TTT GROUP BY uid

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای محاسبه فاصله ، دو سوابق ورود به سیستم آخر کاربر مورد نیاز است ، که در اصل یک عملیات TOPN در گروه است. با این حال ، SQL پس از گروه بندی ، تجمع را مجبور می کند ، بنابراین برای اجرای غیرمستقیم باید یک رویکرد خود را اتخاذ کند.

برنامه نویسی در SPL:

شرح تصویر
SPL درک جدیدی در مورد عملکرد تجمع دارد. علاوه بر مقدار واحد مشترک مانند جمع ، تعداد ، حداکثر و دقیقه ، نتیجه جمع آوری می تواند یک مجموعه باشد. به عنوان مثال ، SPL محاسبه TOPN مشترک را به عنوان یک محاسبه تجمع مانند جمع و تعداد ، که می تواند در یک مجموعه کامل یا یک زیر مجموعه گروه بندی شده انجام شود (مانند این مثال) می تواند انجام دهد.

در مقابل ، SQL عملکرد TOPN را تجمع نمی داند. برای عملکرد TOPN در یک مجموعه کل ، SQL فقط می تواند با استفاده از اولین موارد N پس از مرتب سازی مجموعه نتیجه خروجی ، اجرا شود ، در حالی که برای عملکرد TOPN در یک زیر مجموعه گروه بندی شده ، اجرای SOL دشوار است مگر اینکه به یک راه دور برای تشکیل شماره دنباله تبدیل شود. از آنجا که SPL را به عنوان تجمع می داند ، پس از استفاده از ویژگی های داده های سفارش داده شده ، می توان برخی از محاسبات (مانند این مثال) را اجرا کرد و این رویکرد همچنین می تواند از مرتب سازی تمام داده ها در عمل جلوگیری کند و از این طریق به عملکرد بالاتر برسد.

علاوه بر این ، گروه بندی SPL نه تنها می تواند با تجمع دنبال شود ، بلکه نتیجه گروه بندی (زیر مجموعه گروه بندی شده) ، یعنی مجموعه ای از مجموعه ها را حفظ می کند ، به طوری که می توان عملکرد بین اعضای گروهی را انجام داد.

در مقایسه با SPL ، SQL از نوع داده تنظیم صریح برخوردار نیست و نمی تواند انواع داده مانند مجموعه مجموعه ها را برگرداند. از آنجا که SQL نمی تواند گروه بندی مستقل را اجرا کند ، گروه بندی و جمع بندی باید به عنوان یک کل محدود شود.

از دو مثال فوق ، می توانیم مزایای SPL را در محاسبات سفارش داده شده و گروه بندی مشاهده کنیم. در حقیقت ، بسیاری از ویژگی های SPL بر اساس درک عمیق پردازش داده های ساختاری ساخته شده است. به طور خاص ، گسسته بودن به ما امکان می دهد سوابق را از جدول داده ها جدا کنیم و آنها را به طور مستقل و مکرر محاسبه کنیم. مجموعه جهانی از مجموعه تشکیل شده از هر داده پشتیبانی می کند و در محاسبات شرکت می کند. عملیات پیوستن سه نوع مختلف از اتصالات را متمایز می کند و به ما امکان می دهد با توجه به وضعیت واقعی ، یک عملیات پیوست را انتخاب کنیم. ویژگی پشتیبانی مکان نما این امکان را به SPL می دهد تا توانایی پردازش داده های بزرگ را داشته باشد … با استفاده از این ویژگی ها ، پردازش داده ها برای ما آسان تر و کارآمدتر خواهد بود.

برای اطلاعات بیشتر ، به: عملیات SPL برای مبتدیان مراجعه کنید

به طور غیر منتظره ، SPL همچنین می تواند به عنوان یک انبار داده باشد

پشتیبانی از محاسبات در حافظه و محاسبات ذخیره سازی خارجی به معنای SPL نیز می تواند برای پردازش داده های بزرگ استفاده شود و SPL در مقایسه با فن آوری های سنتی در عملکرد بیشتر است. SPL ده ها الگوریتم با کارایی بالا با “پیچیدگی پایین” برای اطمینان از عملکرد محاسبات ، از جمله:

محاسبات در حافظه: جستجوی باینری ، موقعیت یابی شماره دنباله ، شاخص موقعیت ، شاخص هش ، موقعیت دنباله چند لایه …

جستجوی ذخیره سازی خارجی: جستجوی باینری ، شاخص هش ، فهرست مرتب سازی ، شاخص با ارزش ، بازیابی کامل متن …

محاسبات Traversal: مکان نما تاخیر ، گذر چند منظوره ، موازی چند منظوره ، گروه بندی سفارش داده شده و جمع آوری ، گروه بندی شماره دنباله …

انجمن کلیدی خارجی: آدرس دهی کلیدی خارجی ، شماره گیری دنباله کلیدی خارجی ، استفاده مجدد از فهرست ، دنباله تراز ، پارتیشن بندی یک طرفه …

ادغام و پیوستن: ادغام سفارش داده شده ، ادغام بر اساس بخش ، موقعیت یابی ، جدول پیوست …

تجزیه و تحلیل چند بعدی: قبل از تجمع جزئی ، قبل از تجمع دوره زمانی ، مرتب سازی برکنار ، دنباله ابعاد بولی ، ابعاد بیت برچسب …

محاسبات خوشه ای: جدول کامپوزیت چند منطقه ای خوشه ، جدول ابعاد تکراری ، جدول ابعاد تقسیم شده ، تحمل گسل های افزونگی الگوی و تحمل گسل با الگوی عذاب ، تعادل بار …

شرح تصویر
همانطور که می بینیم SPL الگوریتم های زیادی را ارائه می دهد (برخی از آنها در صنعت پیشگام هستند) ، و همچنین مکانیسم تضمین مربوطه را برای سناریوهای محاسباتی مختلف ارائه می دهند. به عنوان یک زبان برنامه نویسی ، SPL نه تنها توانایی های منحصر به فرد در پایگاه داده بلکه سایر توانایی ها را فراهم می کند ، که می تواند عملکرد محاسباتی را به طور کامل تضمین کند.

علاوه بر این الگوریتم ها (توابع) ، باید ذخیره سازی ذکر شود. برخی از الگوریتم های با کارایی بالا فقط پس از ذخیره داده ها به عنوان یک فرم مشخص کار می کنند. به عنوان مثال ، ادغام سفارش داده شده و الگوریتم های پارتیشن بندی یک طرفه که در بالا ذکر شد ، فقط پس از ذخیره داده ها به ترتیب می توانند انجام شوند. به منظور اطمینان از عملکرد محاسبات ، SPL یک ذخیره سازی فایل باینری تخصصی را طراحی می کند. با استفاده از این ذخیره سازی ، و با اتخاذ مکانیسم های ذخیره سازی مانند فشرده سازی کد ، ذخیره ستونی و تقسیم بندی موازی و استفاده از رویکردهایی مانند مرتب سازی و فهرست ، اثربخشی الگوریتم های با کارایی بالا به حداکثر می رسد ، بنابراین به عملکرد محاسبات بالاتر می رسد.

الگوریتم های با کارایی بالا و ذخیره سازی تخصصی باعث می شود SPL تمام توانایی های اصلی انبار داده ها را داشته باشد ، در نتیجه جایگزینی انبارهای داده های رابطه ای سنتی و سیستم عامل های بزرگ مانند Hadoop را با هزینه پایین تر و راندمان بالاتر آسان می کند.

در عمل ، هنگامی که به عنوان انبار داده استفاده می شود ، SPL عملکرد متفاوتی را در مقایسه با راه حل های سنتی نشان می دهد. به عنوان مثال ، در یک سناریوی تجزیه و تحلیل قیف تجارت الکترونیکی ، SPL تقریباً 20 برابر سریعتر از Snowflake است حتی اگر روی سرور با پیکربندی پایین اجرا شود. در یک سناریوی محاسباتی از NAOC در بدنهای آسمانی خوشه بندی ، سرعت اجرای SPL روی یک سرور واحد 2000 برابر سریعتر از یک خوشه تشکیل شده از یک پایگاه داده خاص توزیع شده است. بسیاری از سناریوهای مشابه وجود دارد ، در اصل ، SPL می تواند چندین بار به ده ها بار سرعت بخشد و عملکرد بسیار برجسته ای را نشان می دهد.

به طور خلاصه ، SPL ، به عنوان یک زبان تخصصی پردازش داده ها ، برنامه نویسی بسیار غیر متعارف شبکه را اتخاذ می کند ، که در بسیاری از جنبه ها از جمله قالب و اشکال زدایی راحتی به ارمغان می آورد (البته کسانی که از برنامه نویسی به سبک متن استفاده می شوند ، نیاز به سازگاری با این تغییر دارند). علاوه بر این ، از نظر نحو ، SPL برخی از ویژگی های جدید مانند گزینه ، پارامترهای چند لایه و نحو لامبدا را در بر می گیرد و باعث می شود SPL جالب به نظر برسد. با این حال ، این ویژگی ها در واقع محاسبات داده ها را ارائه می دهند ، که ناشی از درک عمیق SPL از محاسبات داده های ساخت یافته (عمیق تر و کامل تر از SQL) است. فقط با درک عمیق می توان این ویژگی های جالب را توسعه داد و فقط با این ویژگی ها می توان داده ها را به سادگی ، راحت و سریع پردازش کرد. در برنامه نویسی ساده تر و سریعتر در حال اجرا همان چیزی است که SPL هدف دستیابی به آن است و در این فرآیند ، چارچوب برنامه نیز می تواند بهبود یابد (در اینجا مفصل نیست).

به طور خلاصه ، SPL یک زبان برنامه نویسی است که ارزش امتحان کردن را دارد.

Esprocspl منبع باز و رایگان و منبع باز است
بارگیری رایگان

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا