{"id":36171,"date":"2019-10-31T22:09:58","date_gmt":"2019-10-31T19:09:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\/"},"modified":"2019-10-31T22:09:58","modified_gmt":"2019-10-31T19:09:58","slug":"po-sledam-highload-siberia-2019-8-zadach-po-oracle","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"Nga Highload++ Siberia 2019 \u2014 8 detyra p\u00ebr Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\ud83e\udd47Si t\u00eb arrish n\u00eb qiell dhe t\u00eb b\u00ebhesh pilot | ProHoster<\/p>\n<p>M\u00eb 24-25 qershor n\u00eb Novosibirsk u mbajt konferenca Highload++ Siberia 2019. Djemt\u00eb tan\u00eb ishin gjithashtu atje. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">prezantim t\u00eb shk\u00eblqyer<\/a><\/noindex> \u00abBaza t\u00eb container Oracle (CDB\/PDB) dhe p\u00ebrdorimi i tyre praktik p\u00ebr zhvillimin e softuerit\u00bb, ne do ta publikojm\u00eb versionin tekstual pak m\u00eb von\u00eb. Ishte super, faleminderit <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> p\u00ebr organizimin, si dhe p\u00ebr t\u00eb gjith\u00eb ata q\u00eb erdh\u00ebn. <\/p>\n<p><img decoding=\"async\" alt=\"Nga Highload++ Siberia 2019 \u2014 8 detyra p\u00ebr Oracle\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb k\u00ebt\u00eb post do t\u00eb doja t\u00eb ndaja me ju detyrat q\u00eb ishin n\u00eb stend\u00ebn ton\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb ju t\u00eb mund t\u00eb kontrolloni njohurit\u00eb tuaja n\u00eb Oracle. Posht\u00eb keni 8 detyra, variante p\u00ebrgjigjesh dhe shpjegime.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u00c7far\u00eb \u00ebsht\u00eb vlera maksimale e sekuenc\u00ebs q\u00eb do t\u00eb shohim si rezultat i ekzekutimit t\u00eb k\u00ebtij skenari?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create sequence s start with 1;\n \nselect s.currval, s.nextval, s.currval, s.nextval, s.currval\nfrom dual\nconnect by level &lt;= 5;\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1<\/li>\n<li>5<\/li>\n<li>10<\/li>\n<li>25<\/li>\n<li>Asnj\u00eb, do t\u00eb ket\u00eb nj\u00eb gabim.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Sipas dokumentacionit Oracle (cituar nga 8.1.6):<br \/>\nBrenda nj\u00eb deklarate t\u00eb vetme SQL, Oracle do t\u00eb rris\u00eb sekuenc\u00ebn vet\u00ebm nj\u00eb her\u00eb p\u00ebr rresht. N\u00ebse nj\u00eb deklarat\u00eb p\u00ebrmban m\u00eb shum\u00eb se nj\u00eb referenc\u00eb n\u00eb NEXTVAL p\u00ebr nj\u00eb sekuenc\u00eb, Oracle e rrit sekuenc\u00ebn nj\u00eb her\u00eb dhe kthen t\u00eb nj\u00ebjt\u00ebn vler\u00eb p\u00ebr t\u00eb gjitha rastet e NEXTVAL. N\u00ebse nj\u00eb deklarat\u00eb p\u00ebrmban referenca si CURRVAL, ashtu edhe NEXTVAL, Oracle e rrit sekuenc\u00ebn dhe kthen t\u00eb nj\u00ebjt\u00ebn vler\u00eb p\u00ebr t\u00eb dy CURRVAL dhe NEXTVAL, pa marr\u00eb parasysh rendin e tyre brenda deklarat\u00ebs.<\/p>\n<p>K\u00ebshtu, <b>Vlera maksimale do t\u00eb p\u00ebrputhet me numrin e rreshtave, pra 5.<\/b>.<\/p>\n<h3>Sa rreshta do t\u00eb p\u00ebrfundojn\u00eb n\u00eb tabel\u00eb si rezultat i ekzekutimit t\u00eb k\u00ebtij skenari?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer check (i &lt; 5));\n \ncreate procedure p(p_from integer, p_to integer) as\nbegin\n    for i in p_from .. p_to loop\n        insert into t values (i);\n    end loop;\nend;\n\/\n \nexec p(1, 3);\nexec p(4, 6);\nexec p(7, 9);<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>0<\/li>\n<li>3<\/li>\n<li>4<\/li>\n<li>5<\/li>\n<li>6<\/li>\n<li>9<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Sipas dokumentacionit Oracle (cituar nga 11.2):<\/p>\n<p>Para se t\u00eb ekzekutoj\u00eb \u00e7do deklarat\u00eb SQL, Oracle sh\u00ebnon nj\u00eb savepoint implicit (nuk \u00ebsht\u00eb n\u00eb dispozicion p\u00ebr ju). M\u00eb pas, n\u00ebse deklarata d\u00ebshton, Oracle e rikthen automatikisht dhe kthen kodin e gabimit t\u00eb p\u00ebrkatsh\u00ebm n\u00eb SQLCODE n\u00eb SQLCA. P\u00ebr shembull, n\u00ebse nj\u00eb deklarat\u00eb INSERT shkakton nj\u00eb gabim duke u p\u00ebrpjekur t\u00eb fus\u00eb nj\u00eb vler\u00eb t\u00eb r\u00ebnd\u00ebsishme n\u00eb nj\u00eb indeks unik, deklarata rikthehet.<\/p>\n<p>Thirrja e procedur\u00ebs t\u00eb ruajtur nga klienti gjithashtu shqyrtohet dhe p\u00ebrpunohen si nj\u00eb deklarat\u00eb e vetme. K\u00ebshtu, thirrja e par\u00eb e procedur\u00ebs s\u00eb ruajtur p\u00ebrfundon me sukses, duke shtuar tre regjistrime; thirrja e dyt\u00eb p\u00ebrfundon me nj\u00eb gabim dhe rikthen regjistrimin e kat\u00ebrt q\u00eb mundi t\u00eb fus\u00eb; thirrja e tret\u00eb p\u00ebrfundon me nj\u00eb gabim, <b>dhe n\u00eb tabel\u00eb p\u00ebrfundojn\u00eb tre regjistrime.<\/b>.<\/p>\n<h3>Sa rreshta do t\u00eb p\u00ebrfundojn\u00eb n\u00eb tabel\u00eb si rezultat i ekzekutimit t\u00eb k\u00ebtij skenari?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer, constraint i_ch check (i &lt; 3));\n \nbegin\n    insert into t values (1);\n    insert into t values (null);\n    insert into t values (2);\n    insert into t values (null);\n    insert into t values (3);\n    insert into t values (null);\n    insert into t values (4);\n    insert into t values (null);\n    insert into t values (5);\nexception\n    when others then\n        dbms_output.put_line(&#039;Oops!&#039;);\nend;\n\/<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1<\/li>\n<li>2<\/li>\n<li>3<\/li>\n<li>4<\/li>\n<li>5<\/li>\n<li>6<\/li>\n<li>7<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Sipas dokumentacionit Oracle (cituar nga 11.2):<\/p>\n<p>Nj\u00eb kusht kontrolli ju lejon t\u00eb specifikoni nj\u00eb kusht q\u00eb \u00e7do rresht n\u00eb tabel\u00eb duhet t\u00eb p\u00ebrmbush\u00eb. P\u00ebr t\u00eb plot\u00ebsuar kushtin, \u00e7do rresht n\u00eb tabel\u00eb duhet t\u00eb b\u00ebj\u00eb q\u00eb kushti t\u00eb jet\u00eb ose TRUE ose i panjohur (p\u00ebr shkak t\u00eb null). Kur Oracle vler\u00ebson nj\u00eb kusht kontrolli p\u00ebr nj\u00eb rresht t\u00eb ve\u00e7ant\u00eb, emrat e kolonave n\u00eb kusht i referohen vlerave t\u00eb kolonave n\u00eb at\u00eb rresht.<\/p>\n<p>K\u00ebshtu, vlera null do t\u00eb kaloj\u00eb kontrollin, dhe blloku anonim do t\u00eb ekzekutohet me sukses deri n\u00eb p\u00ebrpjekjen p\u00ebr t\u00eb futur vler\u00ebn 3. Pas k\u00ebsaj, blloku i trajtimit t\u00eb gabimeve do ta ndal\u00eb p\u00ebrjashtimin, nuk do t\u00eb ndodhi asnj\u00eb rikthim dhe <b>n\u00eb tabel\u00eb do t\u00eb mbeten kat\u00ebr rreshta<\/b> me vlerat 1, null, 2 dhe p\u00ebrs\u00ebri null.<\/p>\n<h3>Cilat pal\u00eb vlerash do t\u00eb z\u00ebn\u00eb t\u00eb nj\u00ebjt\u00ebn hap\u00ebsir\u00eb n\u00eb bllok?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (\n    a char(1 char),\n    b char(10 char),\n    c char(100 char),\n    i number(4),\n    j number(14),\n    k number(24),\n    x varchar2(1 char),\n    y varchar2(10 char),\n    z varchar2(100 char));\n \ninsert into t (a, b, i, j, x, y)\n    values ('Y', 'Vasil', 10, 10, 'D', 'Vasil');\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>A dhe X<\/li>\n<li>B dhe Y<\/li>\n<li>C dhe K<\/li>\n<li>C dhe Z<\/li>\n<li>K dhe Z<\/li>\n<li>I dhe J<\/li>\n<li>J dhe X<\/li>\n<li>T\u00eb gjitha t\u00eb renditurat<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Do t\u00eb japim p\u00ebrmbledhje nga dokumentacioni (12.1.0.2) mbi ruajtjen e tipeve t\u00eb ndrysh\u00ebm t\u00eb t\u00eb dh\u00ebnave n\u00eb Oracle.<\/p>\n<p><b>Tipi i t\u00eb Dh\u00ebnave CHAR<\/b><br \/>\nTipi i t\u00eb dh\u00ebnave CHAR specifikon nj\u00eb string karakteresh me gjat\u00ebsi fikse n\u00eb setin e karaktereve t\u00eb databaz\u00ebs. Specifikoni setin e karaktereve t\u00eb databaz\u00ebs kur krijoni databaz\u00ebn tuaj. Oracle siguron q\u00eb t\u00eb gjitha vlerat e ruajta n\u00eb nj\u00eb kolon\u00eb CHAR kan\u00eb gjat\u00ebsi t\u00eb specifikuar nga madh\u00ebsia n\u00eb semantik\u00ebn e zgjedhur. N\u00ebse insertoni nj\u00eb vler\u00eb q\u00eb \u00ebsht\u00eb m\u00eb e shkurt\u00ebr se gjat\u00ebsi e kolon\u00ebs, Oracle e plot\u00ebson vler\u00ebn me hap\u00ebsira deri te gjat\u00ebsi e kolon\u00ebs.<\/p>\n<p><b>Tipi i t\u00eb Dh\u00ebnave VARCHAR2<\/b><br \/>\nTipi i t\u00eb dh\u00ebnave VARCHAR2 specifikon nj\u00eb string karakteresh me gjat\u00ebsi t\u00eb ndryshueshme n\u00eb setin e karaktereve t\u00eb databaz\u00ebs. Specifikoni setin e karaktereve t\u00eb databaz\u00ebs kur krijoni databaz\u00ebn tuaj. Oracle ruan nj\u00eb vler\u00eb karakteri n\u00eb nj\u00eb kolon\u00eb VARCHAR2 pik\u00ebrisht ashtu si\u00e7 e specifikoni, pa asnj\u00eb mbushje me hap\u00ebsira, p\u00ebr sa koh\u00eb q\u00eb vlera nuk kalon gjat\u00ebsi e kolon\u00ebs.<\/p>\n<p><b>Tipi i t\u00eb Dh\u00ebnave NUMBER<\/b><br \/>\nTipi i t\u00eb dh\u00ebnave NUMBER ruan zero si edhe numra t\u00eb rregullt pozitiv\u00eb dhe negativ\u00eb me vlera absolute nga 1.0 x 10-130 deri por jo p\u00ebrfshir\u00eb 1.0 x 10126. N\u00ebse specifikoni nj\u00eb shprehje aritmetike q\u00eb ka nj\u00eb vler\u00eb me nj\u00eb vler\u00eb absolute m\u00eb t\u00eb madhe ose t\u00eb barabart\u00eb me 1.0 x 10126, at\u00ebher\u00eb Oracle kthen nj\u00eb gabim. \u00c7do vler\u00eb NUMBER k\u00ebrkon nga 1 deri n\u00eb 22 bajt\u00eb. Duke e marr\u00eb k\u00ebt\u00eb parasysh, madh\u00ebsia e kolon\u00ebs n\u00eb bajta p\u00ebr nj\u00eb vler\u00eb numerike t\u00eb ve\u00e7ant\u00eb NUMBER(p), ku p \u00ebsht\u00eb sakt\u00ebsia e nj\u00eb vler\u00eb t\u00eb caktuar, mund t\u00eb llogaritet duke p\u00ebrdorur formul\u00ebn e m\u00ebposhtme: <i>ROUND((length(p)+s) \/ 2))+1<\/i> ku s barazohet me zero n\u00ebse numri \u00ebsht\u00eb pozitiv, dhe s barazohet me 1 n\u00ebse numri \u00ebsht\u00eb negativ.<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, le t\u00eb marrim nj\u00eb p\u00ebrmbledhje nga dokumentacioni mbi ruajtjen e vlerave Null.<\/p>\n<p>Nj\u00eb null \u00ebsht\u00eb mungesa e nj\u00eb vler\u00eb n\u00eb nj\u00eb kolon\u00eb. Nulls tregojn\u00eb t\u00eb dh\u00ebna t\u00eb humbura, t\u00eb panjohura ose t\u00eb pap\u00ebrdorshme. Nulls ruhen n\u00eb databaz\u00eb n\u00ebse bien nd\u00ebrmjet kolovnave me vlera t\u00eb dh\u00ebnash. N\u00eb k\u00ebto raste, ato k\u00ebrkojn\u00eb 1 bajt p\u00ebr t\u00eb ruajtur gjat\u00ebsi e kolon\u00ebs (zero). Nulls pas nj\u00eb rreshti nuk k\u00ebrkojn\u00eb ruajtje sepse nj\u00eb krye t\u00eb ri rreshti sinjalizon q\u00eb kolonat e mbetura n\u00eb rreshtin e m\u00ebparsh\u00ebm jan\u00eb null. P\u00ebr shembull, n\u00ebse tre kolona t\u00eb fundit t\u00eb nj\u00eb tabele jan\u00eb null, at\u00ebher\u00eb asnj\u00eb t\u00eb dh\u00ebna nuk ruhet p\u00ebr k\u00ebto kolona.<\/p>\n<p>Duke u bazuar n\u00eb k\u00ebto t\u00eb dh\u00ebna, ne formulojm\u00eb arsyetimin. Supozojm\u00eb se n\u00eb DB p\u00ebrdoret kodimi AL32UTF8. N\u00eb k\u00ebt\u00eb kodim, shkronjat ruse do t\u00eb z\u00ebn\u00eb 2 bajta.<\/p>\n<p>1) A dhe X, vlera e fush\u00ebs a 'Y' z\u00eb 1 byte, vlera e fush\u00ebs x 'D' - 2 byte<br \/>\n2) B dhe Y, 'Vasja' n\u00eb b do t\u00eb plot\u00ebsohet me shkronja deri n\u00eb 10 karaktere dhe do t\u00eb marr\u00eb 14 byte, 'Vasja' n\u00eb d - do t\u00eb marr\u00eb 8 byte.<br \/>\n3) C dhe K. T\u00eb dy fushat kan\u00eb vler\u00eb NULL, pas tyre ka fusha t\u00eb vlefshme, prandaj z\u00ebn\u00eb nga 1 byte.<br \/>\n4) C dhe Z. T\u00eb dy fushat kan\u00eb vler\u00eb NULL, por fusha Z \u2013 \u00ebsht\u00eb e fundit n\u00eb tabel\u00eb, prandaj nuk z\u00eb vend (0 byte). Fusha C z\u00eb 1 byte.<br \/>\n5) K dhe Z. Si\u00e7 ishte rastin e m\u00ebparsh\u00ebm. Vler\u00eb n\u00eb fush\u00ebn K z\u00eb 1 byte, n\u00eb Z \u2013 0.<br \/>\n6) I dhe J. Sipas dokumentacionit, t\u00eb dy vlerat do t\u00eb z\u00ebn\u00eb nga 2 byte. Gjat\u00ebsin\u00eb e llogarisim sipas formul\u00ebs t\u00eb marr\u00eb nga dokumentacioni: round((1 + 0) \/ 2) + 1 = 1 + 1 = 2.<br \/>\n7) J dhe X. Vlera n\u00eb fush\u00ebn J do t\u00eb marr\u00eb 2 byte, vlera n\u00eb fush\u00ebn X do t\u00eb marr\u00eb 2 byte.<\/p>\n<p><b>Deri tani, variantet e sakta jan\u00eb: C dhe K, I dhe J, J dhe X.<\/b><\/p>\n<p><\/p>\n<h3>Cila do t\u00eb jet\u00eb pothuajse clustering factor p\u00ebr indeksin T_I?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (i integer);\n \ninsert into t select rownum from dual connect by level &lt;= 10000;\n \ncreate index t_i on t(i);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Pothuajse dhjet\u00ebra<\/li>\n<li>Pothuajse qindra<\/li>\n<li>Pothuajse mij\u00ebra<\/li>\n<li>Pothuajse dhjet\u00ebra mij\u00ebra<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Sipas dokumentacionit Oracle (cituar nga 12.1):<\/p>\n<p>P\u00ebr nj\u00eb indeks B-tree, faktori i grupimit t\u00eb indeksit mat fizikisht grupimin e rreshtave n\u00eb lidhje me nj\u00eb vler\u00eb indeksi.<\/p>\n<p>Faktori i grupimit t\u00eb indeksit ndihmon optimizuesin t\u00eb vendos\u00eb n\u00ebse nj\u00eb skanimi indeksi ose nj\u00eb skanimi t\u00eb plot\u00eb t\u00eb tabel\u00ebs \u00ebsht\u00eb m\u00eb efikas p\u00ebr disa pyetje. Nj\u00eb faktor grupimi i ul\u00ebt tregon nj\u00eb skanim t\u00eb efektsh\u00ebm t\u00eb indeksit.<\/p>\n<p>Nj\u00eb faktor grupimi q\u00eb \u00ebsht\u00eb af\u00ebr numrit t\u00eb blloqeve n\u00eb nj\u00eb tabel\u00eb tregon se rreshtat jan\u00eb fizikisht t\u00eb renditur n\u00eb blloqet e tabel\u00ebs sipas \u00e7el\u00ebsit t\u00eb indeksit. N\u00ebse databaza p\u00ebrllogarit nj\u00eb skan t\u00eb plot\u00eb t\u00eb tabel\u00ebs, at\u00ebher\u00eb databaza ka tendenc\u00eb t\u00eb rikuperoj\u00eb rreshtat ashtu si jan\u00eb ruajtur n\u00eb disk t\u00eb renditur sipas \u00e7el\u00ebsit t\u00eb indeksit. Nj\u00eb faktor grupimi q\u00eb \u00ebsht\u00eb af\u00ebr numrit t\u00eb rreshtave tregon se rreshtat jan\u00eb t\u00eb shp\u00ebrndara rast\u00ebsisht n\u00eb blloqet e databaz\u00ebs n\u00eb lidhje me \u00e7el\u00ebsin e indeksit. N\u00ebse databaza b\u00ebn nj\u00eb skan t\u00eb plot\u00eb t\u00eb tabel\u00ebs, at\u00ebher\u00eb databaza nuk do t\u00eb rikuperoj\u00eb rreshtat n\u00eb asnj\u00eb rend t\u00eb renditur sipas k\u00ebtij \u00e7el\u00ebsi indeksi.<\/p>\n<p>N\u00eb k\u00ebt\u00eb rast, t\u00eb dh\u00ebnat jan\u00eb t\u00eb organizuara perfekt, prandaj faktor grupimi do t\u00eb jet\u00eb i barabart\u00eb ose af\u00ebr numrit t\u00eb blloqeve t\u00eb z\u00ebna n\u00eb tabel\u00eb. P\u00ebr nj\u00eb madh\u00ebsi standarde blloku prej 8 kilobytes, mund t\u00eb pritet q\u00eb n\u00eb nj\u00eb bllok mund t\u00eb vendosen rreth nj\u00eb mij\u00eb vlera t\u00eb ngushta numri, prandaj numri i blloqeve, dhe si pasoj\u00eb, faktori i grupimit do t\u00eb jet\u00eb <b>pothuajse dhjet\u00ebra<\/b>.<\/p>\n<h3>Me \u00e7far\u00eb vlerash N skenari i m\u00ebposht\u00ebm do t\u00eb ekzekutohet me sukses n\u00eb nj\u00eb databaz\u00eb normale me cil\u00ebsime standarde?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (\n    a varchar2(N char),\n    b varchar2(N char),\n    c varchar2(N char),\n    d varchar2(N char));\n \ncreate index t_i on t (a, b, c, d);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>100<\/li>\n<li>200<\/li>\n<li>400<\/li>\n<li>800<\/li>\n<li>1600<\/li>\n<li>3200<\/li>\n<li>6400<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Sipas dokumentacionit Oracle (cituar nga 11.2):<\/p>\n<p>Kufijt\u00eb e Logjik\u00ebs s\u00eb Databas\u00ebs<\/p>\n<p><strong>Artikulli<\/strong><br \/>\n<strong>Lloji i Kufirit<\/strong><br \/>\n<strong>Vlera e Kufirit<\/strong><\/p>\n<p>Indekset<br \/>\nMadh\u00ebsia totale e kolonave t\u00eb indeksuara<br \/>\n75% e madh\u00ebsis\u00eb s\u00eb bllokut t\u00eb databaz\u00ebs minus disa kosto shtes\u00eb<\/p>\n<p>\nPra pasoj\u00eb, madh\u00ebsia totale e kolonave t\u00eb indeksuara nuk duhet t\u00eb kaloj\u00eb 6 KB. M\u00eb tej, kjo varet nga kodimi i zgjedhur i baz\u00ebs. P\u00ebr kodimin AL32UTF8, nj\u00eb karakter mund t\u00eb z\u00ebr\u00eb maksimum 4 byte, k\u00ebshtu q\u00eb n\u00eb 6 kilobajt n\u00eb rastin m\u00eb t\u00eb keq hyjn\u00eb rreth 1500 karaktere. Prandaj, Oracle do t\u00eb ndaloj\u00eb krijimin e indeksit kur N = 400 (kur gjat\u00ebsi e \u00e7el\u00ebsit n\u00eb rastin m\u00eb t\u00eb keq do t\u00eb jet\u00eb 1600 karaktere * 4 byte + gjat\u00ebsi e rowid), nd\u00ebrsa <b>kur N = 200 (dhe m\u00eb pak)<\/b> krijimi i indeksit do t\u00eb funksionoj\u00eb pa probleme.<\/p>\n<h3>Operatori INSERT me hint t\u00eb APPEND-it \u00ebsht\u00eb i destinuar p\u00ebr ngarkimin e t\u00eb dh\u00ebnave n\u00eb modalitetin direkt. \u00c7far\u00eb do t\u00eb ndodh\u00eb n\u00ebse aplikohuese n\u00eb tabel\u00eb ku ka nj\u00eb trigger?<\/h3>\n<p><\/p>\n<ul>\n<li>T\u00eb dh\u00ebnat do t\u00eb ngarkohen n\u00eb modalitetin direkt, trigger-i do t\u00eb aktivohet si\u00e7 duhet<\/li>\n<li>T\u00eb dh\u00ebnat do t\u00eb ngarkohen n\u00eb modalitetin direkt, por trigger-i nuk do t\u00eb ekzekutohet<\/li>\n<li>T\u00eb dh\u00ebnat do t\u00eb ngarkohen n\u00eb modalitetin konvencional, trigger-i do t\u00eb aktivohet si\u00e7 duhet<\/li>\n<li>T\u00eb dh\u00ebnat do t\u00eb ngarkohen n\u00eb modalitetin konvencional, por trigger-i nuk do t\u00eb ekzekutohet<\/li>\n<li>T\u00eb dh\u00ebnat nuk do t\u00eb ngarkohen, do t\u00eb regjistrohet nj\u00eb gabim<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>N\u00eb parim, ky \u00ebsht\u00eb nj\u00eb pyetje m\u00eb shum\u00eb logjike. P\u00ebr t\u00eb gjetur p\u00ebrgjigjen e sakt\u00eb, do t\u00eb sugjeroja modelin e m\u00ebposht\u00ebm t\u00eb mendimit:<\/p>\n<ol>\n<li>Inseartimi n\u00eb modalitetin direkt realizohet p\u00ebrmes formimit t\u00eb drejtp\u00ebrdrejt\u00eb t\u00eb bllokut t\u00eb t\u00eb dh\u00ebnave, pa kaluar nga SQL-motori, q\u00eb siguron shpejt\u00ebsi t\u00eb lart\u00eb. K\u00ebshtu, sigurimi i ekzekutimit t\u00eb trigger-it \u00ebsht\u00eb shum\u00eb i v\u00ebshtir\u00eb, n\u00ebse jo i pamundur, dhe nuk ka kuptim sepse ai do t\u00eb ngadal\u00ebsoj\u00eb ndjesh\u00ebm insertin.<\/li>\n<li>Mos-ekzekutimi i trigger-it do t\u00eb sjell\u00eb q\u00eb, n\u00ebse t\u00eb dh\u00ebnat jan\u00eb t\u00eb nj\u00ebjta n\u00eb tabel\u00eb, gjendja e baz\u00ebs n\u00eb p\u00ebrgjith\u00ebsi (t\u00eb tjerat tabela) do t\u00eb varet nga se si jan\u00eb ngarkuar k\u00ebto t\u00eb dh\u00ebna. Kjo do ta shkatht\u00ebsonte qart\u00ebsin\u00eb e t\u00eb dh\u00ebnave dhe nuk mund t\u00eb aplikohet si nj\u00eb zgjidhje n\u00eb production.<\/li>\n<li>Mos-arritja p\u00ebr t\u00eb ekzekutuar operacionin e k\u00ebrkuar, n\u00eb p\u00ebrgjith\u00ebsi, interpretohet si nj\u00eb gabim. Por k\u00ebtu duhet t\u00eb kujtojm\u00eb se APPEND \u00ebsht\u00eb nj\u00eb hint, dhe logjika e p\u00ebrgjithshme e hints \u00ebsht\u00eb se ato konsiderohen n\u00ebse \u00ebsht\u00eb e mundur, n\u00ebse jo - operacioni ekzekutohet pa marr\u00eb parasysh hintin.<\/li>\n<\/ol>\n<p>\nPrandaj, p\u00ebrgjigjja e pritur \u00ebsht\u00eb - <b>t\u00eb dh\u00ebnat do ngarkohen n\u00eb modalitetin e zakonsh\u00ebm (SQL), trigger-i do t\u00eb aktivohet.<\/b><\/p>\n<p>Sipas dokumentacionit t\u00eb Oracle (cituar nga 8.04):<\/p>\n<p>Shkeljet e kufizimeve do t\u00eb shkaktojn\u00eb q\u00eb deklarata t\u00eb ekzekutohet serikisht, duke p\u00ebrdorur rrug\u00ebn e zakonshme t\u00eb insertit, pa paralajm\u00ebrime ose mesazhe gabimi. Nj\u00eb p\u00ebrjashtim \u00ebsht\u00eb kufizimi mbi deklaratat q\u00eb i qasen t\u00eb nj\u00ebjt\u00ebs tabel\u00eb m\u00eb shum\u00eb se nj\u00eb her\u00eb n\u00eb nj\u00eb transaksion, q\u00eb mund t\u00eb shkaktoj\u00eb mesazhe gabimi.<br \/>\nP\u00ebr shembull, n\u00ebse ka tregues ose integritet referencial n\u00eb tabel\u00eb, at\u00ebher\u00eb kodi APPEND do t\u00eb injorohet kur t\u00eb p\u00ebrpiqeni t\u00eb p\u00ebrdorni INSERT ngarkes\u00eb t\u00eb drejtp\u00ebrdrejt\u00eb (serial ose paralel), ashtu si dhe tregohet ose klauzola PARALLEL, n\u00ebse ka.<\/p>\n<h3>\u00c7far\u00eb do t\u00eb ndodh\u00eb kur t\u00eb ekzekutohet skenari i m\u00ebposht\u00ebm?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer not null primary key, j integer references t);\n \ncreate trigger t_a_i after insert on t for each row\ndeclare\n    pragma autonomous_transaction;\nbegin\n    insert into t values (:new.i + 1, :new.i);\n    commit;\nend;\n\/\n \ninsert into t values (1, null);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Ekzekutimi i suksessh\u00ebm<\/li>\n<li>D\u00ebshtim p\u00ebr shkak t\u00eb nj\u00eb gabimi sintaksor<\/li>\n<li>Gabim q\u00eb lidhet me papranueshm\u00ebrin\u00eb e transaksionit autonom<\/li>\n<li>Gabim q\u00eb lidhet me tejkalimin e thell\u00ebsis\u00eb maksimale t\u00eb thirrjeve<\/li>\n<li>Gabim q\u00eb lidhet me shkeljen e \u00e7el\u00ebsit t\u00eb jasht\u00ebm<\/li>\n<li>Gabim q\u00eb lidhet me bllokimet<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">P\u00ebrgjigje<\/b>Tabelat dhe treguesi krijohen plot\u00ebsisht sakt\u00eb dhe kjo operacion nuk duhet t\u00eb shkaktoj\u00eb probleme. Transaksionet autonome n\u00eb tregues jan\u00eb gjithashtu t\u00eb lejuara, ndryshe nuk do t\u00eb mund t\u00eb b\u00ebhej, p\u00ebr shembull, regjistrimi.<\/p>\n<p>Pas futur s\u00eb rreshtit t\u00eb par\u00eb, aktivizimi i suksessh\u00ebm i treguesit do t\u00eb \u00e7onte n\u00eb futjen e rreshtit t\u00eb dyt\u00eb, duke b\u00ebr\u00eb q\u00eb treguesi t\u00eb aktivizohej p\u00ebrs\u00ebri, t\u00eb fus\u00eb rreshtin e tret\u00eb dhe k\u00ebshtu me radh\u00eb deri sa deklarata t\u00eb d\u00ebshtonte p\u00ebr shkak t\u00eb tejkalimit t\u00eb thell\u00ebsis\u00eb maksimale t\u00eb thirrjeve. Megjithat\u00eb, ndodh nj\u00eb moment tjet\u00ebr delikat. N\u00eb momentin e ekzekutimit t\u00eb treguesit p\u00ebr t\u00eb parin e ngarkuar, ende nuk \u00ebsht\u00eb kryer commit. Prandaj, treguesi q\u00eb punon n\u00eb nj\u00eb transaksion autonom po p\u00ebrpiqet t\u00eb fus\u00eb n\u00eb tabel\u00eb nj\u00eb rresht q\u00eb referon me \u00e7el\u00ebsin e jasht\u00ebm nj\u00eb rekord q\u00eb nuk \u00ebsht\u00eb akoma i komituar. Kjo \u00e7on n\u00eb pritje (transaksioni autonom pret komitin e kryesorit p\u00ebr t\u00eb kuptuar n\u00ebse mund t\u00eb insertohet t\u00eb dh\u00ebnat) dhe nj\u00ebkoh\u00ebsisht transaksioni kryesor pret komitin e autonomes p\u00ebr t\u00eb vazhduar pun\u00ebn pas treguesit. <b>Kjo shkakton nj\u00eb deadlock dhe si pasoj\u00eb \u2013 transaksioni autonom eliminohet p\u00ebr shkak t\u00eb bllokimeve<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Vet\u00ebm p\u00ebrdoruesit e regjistruar mund t\u00eb marrin pjes\u00eb n\u00eb anket\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Hyni<\/a><\/noindex>, ju lutem.<\/p>\n<h2 class=\"default-block__polling-title\">Ishte e v\u00ebshtir\u00eb?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Si dy gishta, e zgjidh\u00ebm menj\u00ebher\u00eb sakt\u00eb.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jo shum\u00eb, gabova n\u00eb disa pyetje.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Zgjodha gjysm\u00ebn sakt\u00eb.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    E kam gjetur p\u00ebrgjigjen dy her\u00eb!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Do t\u00eb shkruaj n\u00eb komentet<\/p>\n<\/li>\n<\/ul>\n<p>    14 p\u00ebrdorues votuan. 10 p\u00ebrdorues u ndal\u00ebn.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/459680\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019. \u041d\u0430\u0448\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u00ab\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0431\u0430\u0437\u044b Oracle (CDB\/PDB) \u0438 \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e\u00bb, \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435. \u0411\u044b\u043b\u043e \u043a\u0440\u0443\u0442\u043e, \u0441\u043f\u0430\u0441\u0438\u0431\u043e olegbunin \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27053,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Highload++ Siberia 2019 \u2014 8 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e Oracle | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Pas Highload++ Siberia 2019 \u2014 8 detyra p\u00ebr Oracle | ProHoster","description":"P\u00ebrsh\u00ebndetje! Nga 24-25 qershori, n\u00eb Novosibirsk u mbajt konferenca Highload++ Siberia 2019.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Highload++ Siberia 2019 \u2014 8 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e Oracle | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:58+00:00","article:modified_time":"2019-10-31T19:09:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36171","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:18:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:49:43","updated":"2026-01-22 02:18:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}