În ultimul număr am vorbit despre inovații, hardware și software, care au dus la apariția noului produs al firmei din Walldorf, și anume SAP HANA. În acest număr vom analiza modul cum toate aceste inovații, în combinație cu SAP HANA Studio, un IDE (Integrated Development Enviroment) nou de la SAP, ajută la reducerea timpilor de implementare a proiectelor și desigur la reducerea timpilor de execuție a aplicațiilor bazate pe HANA.
Pentru ca aplicațiile să profite de puterea de procesare oferită de HANA, cel puțin o parte din logica aplicației, ideal toată logica, să fie executată la nivelul bazei de date. Acest lucru este important pentru calcule complexe ( SUM, AVG, COUNT, etc. ) cu un volum mare de date, care de obicei durează mult. În acest fel, nu suntem obligați să transferăm volume mari de date, fapt ce reduce performanța în mod considerabil. Acest proces de "transfer" al codului din application layer în database layer se numește Code Pushdown, sau principiul Code-to-data. Cu alte cuvinte, nu transferăm datele din baza de date către aplicație, pentru a fi procesate, ci transferăm logica aplicației în baza de date.
Până acum, aplicațiile SAP foloseau principiul Data-to-code, dar aplicațiie optimizate sau dezvoltate special pentru HANA folosesc principiul Code-to-data. Cu acest nou principiu, code-to-data, volumul de date transferat este menținut la un nivel minim. Vezi figura 1.
Fig. 1. Code-to-data și data-to-code
Sistemele ERP SAP ( Enterprise Resource Planning ) pot rula pe mai multe baze de date de la producători diferiți, ca IBM DB2, Oracle, Sybase ASE, etc. . Datorită arhitecturii sistemului, programatorii nu trebuie să țină cont de baza de date pe care rulează aplicațiile, deoarece există o componentă software, numită Database Iterface, care "traduce" instrucțiunile CRUD ( Create, Read, Update și Delete) din aplicații, în instrucțiuni specifice fiecărei baze de date. Aceasta înseamnă că baza de date este privită ca un Black Box , detalii despre baza de date nu sunt cunoscute de către programatori și că toate aplicațiile rulează pe sisteme SAP indiferent de baza de date.
Cu toate acestea, dacă vrem ca o parte din logica aplicației să fie executată în baza de date, în cazul nostru HANA, asemenea detalii trebuie cunoscute. Dacă vrem să beneficiem de SAP HANA și să atingem performanțe ridicate, baza de date trebuie să devină un White Box, adică trebuie să știm ce se întâmplă în interior.
În trecut, ca programatori ABAP, foloseam ABAP Workbench, bazat pe SAP GUI, pentru dezvoltarea, modificarea și testarea programelor. Din nevoia de a integra mai multe limbaje de programare ca ABAP, SQLScript( folosit pentru HANA ), HTML, CSS, JavaScript (ultimele 3 fiind folosite pentru SAP UI5) cei de la SAP au creat un nou IDE, și anume SAP HANA Studio, bazat pe Eclipse 3.8. HANA Studio este folosit și pentru administrarea bazei de date.
În HANA Studio, administratorii sau programatorii se pot conecta simultan la mai multe servere, cu utilizatori diferiți. Acest lucru este benefic în cazul în care lucrăm la proiecte diferite pentru clienți diferiți. În figura de mai jos putem vedea cum, din HANA Studio ne putem conecta, la mai multe Sisteme HANA (SID - System ID) folosing diferiți User-i(SYSTEM, SAP_SUPPORT, HANADB, etc.).
Fig. 2. Mai multe Sisteme cu diferiți utilizatori în HANA Studio
ABAP Managed Database Procedure - este o nouă caracteristică în AS ABAP( Application Server ABAP) care ne permite să scriem proceduri de stocare direct în ABAP. Aceste proceduri pot fi private ca funcții stocate și executate în baza de date. Limbajul folosit pentru ele este SQL Script. Mai exact codul SQL Script este scris în metodele claselor și executat în HANA.
O condiție ca într-o clasă să putem implementa AMDP-uri este ca clasa respectivă să conțină interfața IF_AMDP_MARKER_HDB. Vezi Figura 3.
Fig.3. Definiția clasei
Mai jos am creat o procedură stocată pentru SAP HANA ( FOR HDB - HANA Database) folosind limbajul SQLScript.
Fig. 4. Implementarea clasei
AMDP-urile au fost introduse pentru a ajuta programatorii la urmarea principiului Code Pushdown sau Code-to-Data.
Core Data Services este o colecție de domain-specific languages (DSLs) și servicii pentru definirea și consumarea modelelor de date. Vezi Figura 5.
Aceste limbaje sunt:
Data Definition Language (DDL) - pentru definirea modelelor de date.
Query Language (QL) - pentru citirea datelor.
Data Manipulation Language (DML) - pentru operații CRUD.
Fig. 5. Core Data Services
Cu alte cuvinte, Core Data Services este o îmbunătățire adusă limbajului SQL pentru definirea, manipularea și utilizarea modelelor de date în aplicații HANA.
View-uri CDS sunt definite în fișiere sursă DDL
(R3TR DDLS) folosind instrucțiunea "DEFINE VIEW".
Entitatea View: zcdsv_open_sap_w4u2_01
View-urile SQL sunt reprezentări ale entităților View în baza de date.
Aceste CDS Views pot fi create doar cu ajutorul Tool-urilor pentru ABAP Development în SAP HANA Studio.
Să presupunem că firma Siemens AG are o companie fiică Siemens Logistics care are ca activitate livrarea de colete între companiile Siemens. Atunci, în baza de date a sistemului ERP, ar exista o tabelă cu informații despre pachetele livrate în anul fiscal 2015. Pentru simplitate, am ales ca tabela noastră să conțină doar cinci câmpuri. Vezi Figura 6.
Datele pentru câmpuri au fost generate, pe cât posibil aleatoriu. Astfel pentru câmpul Package Weight(PACK_WEIGHT) avem valori generate în intervalul 1 - 100. Câmpul Weight Unit(WEIGHT_UNIT) ia doar 3 valori, și anume Kilogram(KG), Uncie(OZ) și Livră(LB). Pentru Delivery Price(DELIVERY_PRICE) am generat valori între 1 și 10,000 iar pentru Price Currency avem următoarele valori: USD(Dolar American), EUR(Euro), JPY(Yen Japonez), GBP(Liră Sterlină), RON(Leu Românesc), CAD(Dolar Canadian), AUD(Dolar Australian) și CHF(Franc Elvețian). În total, am generat 2 milioane de înregistrări.
Fig.6. Tabela cu coletele livrate
La sfârșitul anului fiscal, noi ca programatori, avem de conceput și implementat un program care să returneze suma, în USD, a prețurilor de livrare a tuturor coletelor. Acest lucru implică selectarea tuturor datelor din baza de date, parcurgerea lor, conversia în USD și calcularea sumei totale. Folosind un sistem SAP, cu o bază de date Oracle, executare programului a durat 14,42 secunde.
Pe un sistem SAP , având o bază de date HANA, avem posibilitatea de a defini un CDS View și prin acest View putem să urmărim principiul Code-to-Data, astfel reducând considerabil timpul de execuție.
Codul sursă a View-ului CDS arată în felul următor:
@AbapCatalog.sqlViewName: 'ZCDS_USD_V'
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Package delivery costs in USD'
define view Zcds_Pack_Usd as select
from zcj_siemens_pack
{
key pack_oid,
@Semantics.currencyCode
price_curr,
@Semantics.amount.currencyCode: 'price_curr'
delivery_price,
case price_curr
when 'EUR' then cast(delivery_price as abap.fltp ) * 1.1375
when 'JPY' then cast(delivery_price as abap.fltp ) * 0.009
when 'RON' then cast(delivery_price as abap.fltp ) * 0.25
when 'CAD' then cast(delivery_price as abap.fltp ) * 0.77
when 'GBP' then cast(delivery_price as abap.fltp ) * 1.44
when 'AUD' then cast(delivery_price as abap.fltp ) * 0.76
when 'CHF' then cast(delivery_price as abap.fltp ) * 1.03
else delivery_price
end as delivery_price_usd
}
group by
price_curr,
delivery_price,
pack_oid
După activarea codului sursă, avem un View, cu următoarele câmpuri:
Fig.7. View-ul cu prețurile de livrare convertite
Având un câmp cu prețul în USD, pentru a calcula suma totală, putem scrie următoarea interogare: "SELECT SUM(DELIVERY_PRICE_USD) …".
Folosind un sistem SAP, cu o bază de date HANA, executarea programului a durat 0,04 secunde. Calculând raportul dintre cei 2 timpi de execuție obținem un factor de 360,5. Această performanță am obținut-o deoarece calcularea prețurilor, în USD, a fost făcută la nivelul bazei de date, nefiind nevoiți să transferăm acele 2 milioane de înregistrări în application layer, dar transferând în schimb logica de convertire în baza de date, urmând principiul Code-to-Data.
După cum remarcăm, doar schimbarea bazei de date cu o bază de date HANA nu implică neapărat la o performanță ridicată. Este nevoie și de o convertire a aplicațiilor cu probleme, legate de timpii de execuție. Pe lângă toate acestea, trebuie avut în vedere și prețul migrării unui sistem vechi pe o bază de date HANA, căci după cum știm toate tehnologiile noi costă.
de Ovidiu Mățan
de Vasile Boris
de Paul Hrimiuc