اصل ماجرا

Flatiron داده‌ها را به صورت آرایه‌های اولیهٔ ستونی ذخیره می‌کند و عملیات گروه‑بای، مرتب‌سازی و الگوریتم‌های گراف را روی آن‌ها با حلقه‌های بهینه اجرا می‌کند. کتابخانهٔ کاملاً خالص Clojure است و تنها به core.async وابسته؛ برای پردازش‌های بزرگ در‑حافظه بدون پیکربندی اضافی مناسب است. عملکردش نزدیک به کدهای بومی C است و برای تجزیه‌وتحلیل‌های سنگین و گراف‌های بزرگ گزینهٔ جذابی محسوب می‌شود.

متن کامل ترجمه‌شده

Flatiron یک کتابخانه تجزیه و تحلیل قطعه ای برای Clojure است. این به شما اجازه می دهد از طریق SQL-like DSL به استفاده از جدول های در حافظه سریع تجزیه و تجزیه و تحلیل را اجرا کنید و الگوریتم های گرافیک را در همان داده ها مدیریت می کند. این یک Clojure خالص است که هیچ بستگی غیر از core.async ندارد. فکر کنید که آن را به عنوان چیزی که شما می توانید به جای چرخش در یک پایگاه داده بسته بندی کامل به دست آورید: برخی از داده ها را بارگذاری کنید، گروه به گروه انجام دهید، جمع آوری و فیلتر کنید، شاید PageRank را بر روی یک گرافیک اجرا کنید، همه در فرآیند با تنظیم صفر است. اکثر برنامه های Clojure داده های جدول را به عنوان فرآیند های اولیه از نقشه ها نشان می دهند.وی افزود: در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضر در حال حاضراین است که — هیچ متاژ، هیچ اندکی، فقط مجموعه ای با نام های چاپ شده است. (مطلب ‘[flatiron.column :as col]) (مطلب ‘[flatiron.table :as tbl]) (مطلب [dragons (col/sym-column [:smaug :fafnir :tiamat :smaug :fafnir]) طلا (col/i64-column [9000 750 1200 3100 2400]) جدول (tbl/table [:Dragon :Gold] [dragons gold])] (tbl/nrows جدول) ;; => 5 (tbl/ncols جدول) ;; => 2 (tbl/ncols جدول :Gold)) ; => #�URL_0 - Smaug is hoarding againDomain types like dates and timestamps don’Flatiron نوعی مانند یک قطعه طولانی معمولی را با نوع منطقی برچسب می کند: قطعه نوع فیزیکی خود را (:i64) به هر عملیات گزارش می دهد، بنابراین حلقه های گرم تغییر نمی کنند و ارزش ها هرگز بسته نمی شوند، و تنها مرزها ( ساخت یک قطعه، خواندن یک ارزش به عقب، متوقف) کدک را اجرا می کند که به و از موضوع دامنه تبدیل می شود. (مطلب ‘[flatiron.column :as col])) (let [hire (col/date-tag-column [(java.time.LocalDate/of 2019 4 1)])] (/-coltype-tag-tag-hire) ; => :i64 (physical — what operations dispatch on) (col/-collogical-tag-tag-log) ; => :date (logical —برای هر یک از آنها با کلمه ی col/typed-column یا کلمه ی date-column/instant-column/datetime-column/duration-column helpers یک کلمه ی ایجاد کنید. Predicates به طور مستقیم ارزش دامنه را دریافت می کند. کلمه ی کلمه ای یک بار در هر کلمه ی پیشگویی، خارج از کلمه ی رده، به طوری که مقایسه یک عملیات اولیه باقی می ماند: (-> کارمندان (جایی که (>= :Hired (java.time.LocalDate/of 2020 1 1))) (برای انتخاب :Dept (کلمه ی :Hired)))کارمندان که یک ارزش را حفظ می کنند، نوع منطقی را حفظ می کنند: فیلتر کردن، تنظیم، گروه-به کلید ها، و min/max از کلمه ی تاریخ همه تاریخ ها را بازگردانده استBigDecimal :encode (fn ^long [^java.math.BigDecimal d] (.longValueExact (.movePointRight d 2))) :decode (fn [^long v] (.movePointLeft (java.math.BigDecimal/valueOf v) 2))) (col/typed-column :cents [(bigdec “1.50”) (bigdec “2.25”)))) The where macro builds a boolean mask by comparing a column against a constant, combines masks for compound predicates with and, or, and not, then materializes the rows that pass into a new table. A three-level selection bitmap lives in flatiron.selection as a lower-level primitive for callers who want to track which rows are alive without materializingدر هر بخش، بدن لوله بر روی مجموعه های اولیه خام بدون ارسال پروتکل اجرا می شود. جمع آوری ها و گروهها یک گام بیشتر می روند: آنها مجموعه ی پشتیبان لوله را به طور مستقیم در لوله های تخصصی نوع می خوانند و به لایه لوله بازمی گردند فقط در جایی که غیر مستقیم مورد نیاز است. هر دو راه شما می توانید اختراع عملیات ژنتیکی با عملکرد لوله های اولیه نوشته شده به صورت دستی دریافت کنید. DSL به عملیات مبتنی بر لوله در زمان گسترش میکرو محاسبه می کند. هیچ جزییات در زمان اجرا وجود ندارد - میکروها تماس های مستقیم عملکرد را ارسال می کنند. (مطلب “[flatiron]).dsl:refer [sum count avg min max]) ;; Group-by with aggregation (select trades :Symbol (sum :Qty)) ;; Multiple aggregate functions (select trades :Symbol (sum :Qty) (avg :Price) (count :Qty)) ;; Multiple group-by keys (select trades :Region :Side (sum :Qty)) ;; Cross-tabulation (pivot trades :Symbol :Side :Qty sum)(-> trades (where (> :Qty 100)) (select :Symbol (sum :Qty)) ; این فیلتر را به رده هایی که Qty > 100, سپس گروه ها توسط Symbol و Qty انتخاب می کند.TimSort در یک آرایه آرایه — داده های کلمه هرگز متغیر نمی شود. تاسیس است و پشتیبانی از نظم بالا و پایین. (مطلب ‘[flatiron.sort :as sort])) (مطلب ‘[flatiron.window :as win]) (مطلب [sorted (sort/sort-table [[:Qty :asc]])] (win/row-number sorted)) ;;; => I64Column [1 2 3 4 5]Findow functions operate on sorted columns: - row-number— sequential 1-based numbering - rank— rank with gaps after ties (1, 1, 1, 3, 5) - dense-rank— rank without gaps (1, 1, 2, 2, 3) - lag/- lead access or previous row’s value with offset and default The main parallel entry pointگروه :به عنوان g) (g/parallel-group-by table :keys [:Region] :aggs [{:agg :sum :col :Qty :out :total}] :n-threads 8)flatiron.parallel علاوه بر این، به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به طور همزمان به85)]؛؛؛؛ نتیجه یک جدول با :نود و :rank کلمه ها)الگرافات موجود: - BFS - گسترش-پایان جستجو از یک نوید شروع - DFS - عمق-پایان جستجو، تکراری (نه تکراری) - Dijkstra - یک منبع کوتاه ترین مسیرها با وزن ها - PageRank - PageRank تکراری با فاکتور ویتامین های تنظیم شده - اجزای متصل - یافتن اجزای ضعیف متصل از طریق BFS خواننده CSV انجام می دهد تصدیق نوع با نمونه کردن 100 خط اول، سپس خواندن به کلمه های چاپ شده. آن را به صورت خودکار یک طیف گسترده ای از انواع پردازش می کند. read-csv از محتوای CSV به عنوان یک یا string Reader (نه یک فایل): (مطلب ‘[flatiron.io : schasisten schخواندن هر جایی که ممکن است یک کپی صفر است. ([flatiron.store :as store]) (store/save-table “data/trades_store”) (lat [loaded (store/load-table “data/trades_store”)] (select loaded :Symbol (sum :Qty)))این چند کتابخانه داده های Clojure خوب وجود دارد. Flatiron یک خنثی خاص را پر می کند: - vs clojure.coreseq عملیات - Flatiron دو تا سه نظم از حجم سریع تر در مجموعات عددی در بسیاری از رده ها است، اما تنها با انواع قطعه خود کار می کند. استفاده از عملکرد های هسته ای برای scripting سریع، Flatiron برای بالا بردن سنگین. - vs.techml.dataset-TMD ویژگی های غنی تر است (کارکردن، عملکردات استراتژFlatiron به شما داده های در فرایند می دهد که شما می توانید به طور مستقیم از Clojure بدون از طریق JDBC پردازش می کنید. اگر شما در حال حاضر داده ها در ساختارهای داده Clojure و فقط نیاز به تجزیه و تحلیل سریع، Flatiron کمتر مراسم است. این همچنین یک موتور گرافیک: ایجاد یک گرافیک CSR از دو پله و اجرا BFS، Dijkstra، PageRank، یا اجزای متصل شده بر روی همان داده هایی که شما جمع آوری می کنید - در یک پایگاه داده SQL که به معنای CTE های تکراری در بهترین صورت، یا صادرات به یک کتابخانه گرافیک جداگانه است. bench/flatiron/rayforce_bench.clj همان سؤالات را از طریق Flatiron و از طریق Rayforce اجرا می کند، موتور C17 Flatiron تجزیه می کند. هر دو موتورپله flatiron پله ی واحد است؛ flatiron par8 پله ی متوازن است که با :n-threads 8 (parallel-group-by برای گروه-by-queries، parallel-i64-sum for the scalar sum) اجرا می شود. Rayforce به طور داخلی با پوشه کارگر خود متوازن می شود. اجرای C scalar سه تا ده برابر سریع تر از پله ی متوازن Flatiron است (این از kernels SIMD، یک توزیع کننده شخصی استفاده می کند و پله های حافظه را در اسکن ها پر می کند). هدف Flatiron این است که در یک نظم حجم C باقی بماند، در حالی که Clojure خالص باقی بماند. C-sumar implementation خط هشدار دهنده است: آن را با پله های حافظه متوازن می کند، بنابراین نسخه متوازهشینگ wyhash در flatiron.hash از src/ops/hash.h Rayforce انتقال می شود و DSL از زبان سوال Rayfall خود قرض می گیرد.

چرا مهمه؟

دیتاست‌های بزرگ در Clojure دیگر به‌صورت نقشه‌های ردیفی کارآمد نیستند؛ Flatiron با آرایه‌های ستونی این مشکل را حل می‌کند. توسعه‌دهندگان Clojure که به‌دنبال تجزیه‌وتحلیل سریع و گراف‌پردازی در‑حافظه هستند، تحت تأثیر این کتابخانه قرار می‌گیرند. خواننده باید به این خبر اهمیت بده چون می‌تواند زمان پردازش را به‌طور چشمگیری کاهش دهد و نیاز به استفاده از دیتابیس‌های سنگین یا کتابخانه‌های خارجی را حذف کند.

به درد کی می‌خوره؟

• توسعه‌دهندگان Clojure • مهندسان داده‌های بزرگ • تیم‌های تحلیل‌گر • پژوهشگران گراف

تو عمل چی کار کنیم؟

با افزودن Flatiron به پروژه می‌توانید جدول‌های بزرگ را در‑حافظه بارگذاری کنید، گروه‑بای و جمع‑آوری‌های پیچیده را در چند صد میلی‌ثانیه انجام دهید و الگوریتم‌های گراف مثل PageRank را بدون خروج از محیط Clojure اجرا کنید. این کار باعث می‌شود زمان توسعه کوتاه شود و هزینهٔ زیرساخت‌های خارجی کاهش یابد.

نظر Blue IT News

اگر به‌دنبال سرعتی نزدیک به C در برنامه‌های Clojure‌تان هستید، Flatiron گزینهٔ مناسبی است؛ اما برای کارهای سبک‌تر شاید کتابخانه‌های ساده‌تر کافی باشد.

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