{"id":577311,"date":"2019-04-05T03:41:21","date_gmt":"2019-04-05T10:41:21","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/?post_type=msr-project&#038;p=577311"},"modified":"2021-05-20T13:39:41","modified_gmt":"2021-05-20T20:39:41","slug":"froid","status":"publish","type":"msr-project","link":"https:\/\/www.microsoft.com\/en-us\/research\/project\/froid\/","title":{"rendered":"Froid"},"content":{"rendered":"<p>Froid is an extensible, language-agnostic framework for optimizing imperative functions in databases. Currently, the benefits of UDFs (User-Defined Functions) such as modularity, readability, code reuse come with a huge performance penalty. The purpose of Froid is to enable developers to use the abstraction of UDFs without compromising on performance. Froid introduces a radically different approach to evaluating imperative UDFs that results in improvements of up to multiple orders of magnitude over the current state of the art.<\/p>\n<p><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/project\/aggify\/\">Aggify<\/a> is a related project that broadens the scope of Froid and expands its applicability by allowing optimization of cursor loops in UDFs.<\/p>\n<p>Froid is available as &#8220;Scalar UDF Inlining&#8221; in Microsoft SQL Server 2019 (<a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/user-defined-functions\/scalar-udf-inlining?view=azuresqldb-current&viewFallbackFrom=sql-server-2017\" target=\"_blank\" rel=\"noopener noreferrer\">Read the documentation)<span class=\"sr-only\"> (opens in new tab)<\/span><\/a><\/p>\n<p>&nbsp;<\/p>\n\t\t\t<div class=\"ms-grid \">\n\t\t\t<div class=\"ms-row\">\n\t\t\t\t\t<div  class=\"m-col-12-24\" >\n\t\t<iframe loading=\"lazy\" title=\"RMIT 2018-Dr. Karthik Ramachandra Microsoft Research Lab (October 30-31, 2018)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/agUsEwltnsM?feature=oembed&rel=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>Talk by Karthik at IIIT Bangalore (Oct 2018) as part of RMIT 2018 \t<\/div>\n\t\t<div  class=\"m-col-12-24\" >\n\t\t<iframe loading=\"lazy\" title=\"NWDS Talk - Karthik Ramachandra Optimizing imperative programs in relational databases using Froid\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/Xyvpcf2RtO4?feature=oembed&rel=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>Talk by Karthik at UW Seattle (Mar 2019) as part of the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/db.cs.washington.edu\/nwds\/nwds.html\" target=\"_blank\" rel=\"noopener noreferrer\">NWDS Database Lecture Series<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> \t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\n<p>&nbsp;<\/p>\n\t\t\t<div class=\"ms-grid \">\n\t\t\t<div class=\"ms-row\">\n\t\t\t\t\t<div  class=\"m-col-12-24\" >\n\t\t<iframe loading=\"lazy\" title=\"CMU Advanced Database Systems - 16 Server-side Logic Execution (Spring 2019)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/NQvv8bnHWQU?feature=oembed&rel=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>Talk by Prof. Andrew Pavlo (CMU) as part of the CMU Advanced Database Systems course: <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/15721.courses.cs.cmu.edu\/spring2019\/schedule.html#mar-25-2019\" target=\"_blank\" rel=\"noopener noreferrer\">Spring 2019<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>, <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/15721.courses.cs.cmu.edu\/spring2020\/schedule.html#apr-22-2020\" target=\"_blank\" rel=\"noopener noreferrer\">Spring 2020<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> \t<\/div>\n\t\t<div  class=\"m-col-12-24\" >\n\t\t<iframe loading=\"lazy\" title=\"24 - Server-Side Logic Execution (CMU Databases \/ Spring 2020)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/rAR_lBP2tgY?list=PLSE8ODhjZXjasmrEd2_Yi1deeE360zv5O\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\n","protected":false},"excerpt":{"rendered":"<p>Froid is an extensible, language-agnostic framework for optimizing imperative functions in databases. The purpose of Froid is to enable developers to use the abstraction of UDFs without compromising on performance.<\/p>\n","protected":false},"featured_media":696937,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","footnotes":""},"research-area":[13563],"msr-locale":[268875],"msr-impact-theme":[],"msr-pillar":[],"class_list":["post-577311","msr-project","type-msr-project","status-publish","has-post-thumbnail","hentry","msr-research-area-data-platform-analytics","msr-locale-en_us","msr-archive-status-active"],"msr_project_start":"","related-publications":[577317,609051,683832],"related-downloads":[],"related-videos":[738640],"related-groups":[],"related-events":[693639],"related-opportunities":[],"related-posts":[501344,579994],"related-articles":[],"tab-content":[],"slides":[],"related-researchers":[{"type":"user_nicename","display_name":"Karthik Ramachandra","user_id":37658,"people_section":"Section name 1","alias":"karam"},{"type":"guest","display_name":"Kwanghyun Park","user_id":577332,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Alan Halverson","user_id":577344,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Cesar Galindo-Legaria","user_id":577335,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Conor Cunningham","user_id":577338,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"K Venkatesh Emani","user_id":577341,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Surabhi  Gupta","user_id":683841,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Sanket Purandare","user_id":683844,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Swapnil Gandhi","user_id":684123,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Darshan Kattera","user_id":747424,"people_section":"Section name 1","alias":""},{"type":"guest","display_name":"Sai Prasad Kousika","user_id":747427,"people_section":"Section name 1","alias":""}],"msr_research_lab":[199562],"msr_impact_theme":[],"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/577311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-project"}],"version-history":[{"count":18,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/577311\/revisions"}],"predecessor-version":[{"id":692208,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-project\/577311\/revisions\/692208"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/696937"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=577311"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=577311"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=577311"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=577311"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=577311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}