<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Hybrid Technologies for Databases</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Anatoly V. Anisimov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Igor O. Zavadskiy</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Petro P. Kuliabko</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Taras Shevchenko National University of Kyiv</institution>
          ,
          <addr-line>Volodymyrs'ka, 64/13, Kyiv, 01601</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2021</year>
      </pub-date>
      <fpage>28</fpage>
      <lpage>30</lpage>
      <abstract>
        <p>Relational approach DBTG CODASYL proposal allow us to use better features of each component. We propose some supplementary operations over the data sets - the main construction of DBTG CODASYL proposal, which can be more effective in some cases, at least due to the fact that relational databases use mostly symbolic addressing, and databases with complex structures - mostly relative. As a result, user may choose among different types of data connections concerning the speed of their processing: slow but flexible, or fast but complex.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Hybrid technology</kwd>
        <kwd>relational approach</kwd>
        <kwd>relational algebra</kwd>
        <kwd>DBTG CODASYL proposal</kwd>
        <kwd>data set</kwd>
        <kwd>Dribas algebra</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        As well-known, the relational approach [
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1,2,3</xref>
        ] provides the maximum simplification of the data
structure to a flat file and significant increasing of the data manipulation language level, which makes
it possible to create a clear and strong mathematical background for such languages.
      </p>
      <p>
        However, the transition from more complex structures to relationships means (at least for simple
queries) an impairment in processing efficiency, at least due to that relational databases use mostly
symbolic addressing, and databases with complex structures - mostly relative. Nowadays many
applications need to use BIG Data [
        <xref ref-type="bibr" rid="ref7 ref8 ref9">7,8,9</xref>
        ] and Cloud computing [
        <xref ref-type="bibr" rid="ref10 ref11">10,11</xref>
        ] technologies and receive the
problem of data processing inefficiency. At least in part, the solution is in using different types of
connections among data according to the speed of their processing: from slow but flexible to fast but
complex. So, the main goal of this article is to construct an algebra (based on the relational selective
Dribas algebra [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]) with the basic set that isnm the set of data sets as a supplement to the traditional
algebra over relationships.
      </p>
    </sec>
    <sec id="sec-2">
      <title>2. Selective Dribas algebra</title>
      <p>The selective Dribas algebra was proposed a few years after the appearance of Codd's relational
algebra. Relational Codd algebra is more focused on theoretical aspects, and Dribas algebra is more
convenient in sense of implementation and practical use. It borrowed set-theoretic operations of Codd
relational algebra (union, intersection, and difference), as well as the Cartesian operation and project.
In addition, 4 filtering operations were added. The operation of β-filtering Fβ (R, condition) is very
similar to the Codd operation of -restriction, but in Dribas algebra the condition is an arbitrary
formula without quantifiers with the attributes names from the relationship R and constants, which in
practice is much more convenient than in the Codd case (comparing values of different attributes, but
with the same sign and are combined only by conjunction).</p>
      <p>The next filtering operation F (R1, R2, condition) is also similar to the Codd operation of -join.
The difference is that the result of this operation is a relationship, the scheme of which is a copy of the
relationship R1, and not the Cartesian product of two relationships, as in the classical case. In fact, the
result is only those tuples from R1, for which there is at least one tuple in R2 that satisfies the
condition. Again, we get a practical gain compared to the classic case. The operation F(R1, R2,
condition) has no direct equivalent in classical algebra, but can be expressed through other operations
and was added for practical reasons. As in the previous case, the result of the scheme is the copy from
R1, and is filled with those tuples from R1, for which the condition is equal TRUE for all tuples from
R2. For some queries, this operation is very convenient, and its implementation largely repeats the
implementation of the previous operation. The most interesting and complex in terms of execution
operation FS(R1,R2,A, BaC) is also a filtering operation, the result of which is some subset of tuples
from the relation R1; A, Ba - lists of attributes from R1, and C - list of attributes from R2;  is a
binary predicate of set comparison: , , , , =, . First, R1 is grouped by the same values of
the sub-tuples from list A, then R2 is projected by the list of attributes C; then each group of tuples,
more precisely sub-tuples according to the list Ba, is compared (as a sets) with R2 [C]; if the condition
is TRUE, then the corresponding group of tuples from R1 passes into the result.</p>
    </sec>
    <sec id="sec-3">
      <title>3. DBTG CODASYL proposal</title>
      <p>
        The data set (DS) (after DBTG CODASYL [
        <xref ref-type="bibr" rid="ref4 ref5">4,5</xref>
        ]) - (as an instance) is a two-level tree with one
record-owner (Owner) and several records-members (Member) of the same type. By record we mean
a set of pairs {attribute name: value}, and we interpret uniformity in a relational sense: two records
are considered to be of the same type if there is a bijection between their attributes that matches both
the attribute names and the types of corresponding values. Thus, all records are structurally similar to
tuples of relationships, which really is a simplification in comparison with the DBTG CODASYL
proposal.
      </p>
      <p>Two data sets are of the same type if their owner records and all member records from both data
sets are of the same type. The set of the same type of data sets forms the type of data set. Some
datasets have only one Owner and an empty set of Member records. There can also be records outside
of any data set, then we assume that such records are a Members of some DS, the Owner of which is a
special SYSTEM record. Classical relationships can be formed from the same type of records with the
SYSTEM owner, over which all operations of both Codd relational algebra and Dribas relational
algebra are defined. Therefore, our proposed data model can be considered as an extension of the
relational model, and the data selection language - as an extension of the relational algebras of Codd
and Dribas. Records may or may not have a field similar to the primary key. Database key (DBK) for
written records always exists, but it can be formed on the basis of the several fields, or calculated.
Although firstly it seems that the DS has less expressive power than the hierarchical or network
structure, but in fact each record can be part of several different DS both as owner and as a member,
forming a data structure such as "network".</p>
    </sec>
    <sec id="sec-4">
      <title>4. Example in terms of ER-model</title>
      <p>
        Consider an example of a subject area. First, we give its text description and ER-model (Fig. 1)
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. There are hospitals (Hospital), there are departments (Department) in hospitals, there are
chambers (Chamber) in departments, patients (Patient) reside in chambers; in addition, physicians
(Physician) work in the departments; each physician is responsible for several chambers (perhaps
some physician is not responsible for any chamber); physicians consult patients, one physician can
consult several patients and one patient can be consulted by several physicians. Although all
connections, as seen in the ER-model, have a one-to-many type, the Consulting entity actually
implements a many-to-many connection between the Physician and Patient entities. We need to make
one more important remark. Hospital has its number (h#), which uniquely specifies the object
instance. Department also has its number (d#), but this number is unique only in one hospital (by the
way such situation is quite usual for subject area with hierarchical structure), consequently in
relational model we need to use for the relationship Department the pair attributes (d#, h#) as a
primary key. The same situation we have for the relationship Chamber. Relationships Patient and
Physician have one attribute primary key.
      </p>
      <p>Now we give a description of the data domain according to the relational approach, i.e. each entity
and relationship (type “many-to-many”) are represented by tables with the corresponding attributes:</p>
      <sec id="sec-4-1">
        <title>Hospital(h#, Hname, Hadress, rank); Department(d#, h#, Dname, Dmng);</title>
      </sec>
      <sec id="sec-4-2">
        <title>Chamber(c#, d#, h#, Cname, qnt); Physician(p#, d#, h#, Pname, spec, age);</title>
      </sec>
      <sec id="sec-4-3">
        <title>Patient(t#, c#, d#, h#, Tname, diagn, temp); Consulting(r#, p#, t#, data);</title>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. The operations of the supplement algebra</title>
      <p>We construct a supplement algebra based on DS, i.e. the arguments of the operations of this
algebra will be DS, and the result will also be DS. Note that DS can be thought of as a function that
matches each instance of Member (uniquely, but not mutually uniquely) to the instance of OWNER to
which it is subordinate. Operations are focused on actions within the database, aspects of the interface
will be considered separately. Data sets DS1 and DS2 must be the same type, the resulting DS will be
of the same type. DS3. OWNER = DS1. OWNER U DS2. OWNER (without duplicates), Member
sets are also combined without duplicates, but with subordination, i.e. if there are levels (matching
DBK) records in DS1. OWNER and in DS2. OWNER, then in DS3. OWNER includes only one
record, and many of their subordinate Member records are combined (without duplicates) and are
subordinate to a common OWNER. This operation can cause problems: suppose that DS1 has an
instance (O1, M1) and DS2 has the instance (O2, M1) then after reunion in DS3 we get the situation
that M1 has two owners, which is forbidden, because it is not tree-structure; so in such situations
UNION operation will leave only instance (O1, M1) in DS3.</p>
      <sec id="sec-5-1">
        <title>INTERSECT(DS1, DS2) -&gt; DS3;</title>
        <p>Data sets DS1 and DS2 must be the same type, the resulting DS will be of the same type. DS3.
OWNER is an intersection DS1.OWNER ∩ DS2.OWNER, in particular it may be empty, then the
entire resulting DS will be empty; Member sets also intersect, but only those for which there are
instances of OWNER; instances of DS with empty sets Member can be formed.</p>
        <p>Data sets DS1 and DS2 must be the same type, the resulting DS will be of the same type. DS3.
OWNER = DS1. OWNER \ DS2. OWNER, in particular it may be empty, then the entire resulting DS
will be empty; for Member subtraction is performed on subsets subordinate to one OWNER.</p>
        <p>TIMES(DS1, DS2) -&gt; DS3;</p>
        <p>This operation is defined everywhere and there is no requirement on types of data sets. DS3.
OWNER = DS1. OWNER  DS2. OWNER, instances of Member also multiply among themselves,
but only within the limits of subordination to their OWNER.</p>
      </sec>
      <sec id="sec-5-2">
        <title>PROJECT (DS1, [Olist], [Mlist]);</title>
        <p>Olist is a list of fields for OWNER, and Mlist is a list of fields for Member. Obvious limitation:
Olist must be a sublist of fields DS1.OWNER, and Mlist - a sublist of fields DS1.Member. The
expression [ ] means an empty list of fields, and the expression [*] means that all OWNER or Member
fields are in the list, depending on whether the expression is in the 2nd or 3rd place. In the future there
will be deviations from the classical algebraic style, but this is only for more convenient use; this
technique was used by E. Codd when he introduced relational algebra operations. Besides the overall
case of the PROJECT operation we’ll also use some special cases: PROJECT-OWNER(DS, [Olist])
&gt; R; and PROJECT_Member(DS, [Мlist]) -&gt; R; For both operations their result is not DS, but
relationship; if a member of a data set is a DS, the result of such operation will be a relationship
(according to the list Mlist), which is a Member of the last DS.
5.1.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Operations of filtration</title>
      <p>β-filtration ВFilter(DS1, condition) -&gt; DS2;</p>
      <p>DS2 has the same type as DS1 and is populated with data from DS1 that satisfies the condition.
The condition is a formula with fields from both OWNER and Member, constants, and some unary
predicates, for example: EmptyMember (NotEmptyMember) returns TRUE (FALSE) if there is at
least one instance of Member for the current OWNER instance. The condition verification is valid
within one instance of the data set.</p>
      <sec id="sec-6-1">
        <title>ExistsFilter(DS1,DS2,condition)-&gt; DS3;</title>
        <p>DS3 has the same type as DS1 and is populated with data from DS1 that satisfies the condition if
there is at least one such instance in DS2. The condition is defined in the same way as in the
previous operation, but fields with DS2 may also be present in the formula. Condition verification is
valid within one instance of DS1.</p>
      </sec>
      <sec id="sec-6-2">
        <title>AllFilter(DS1,DS2, condition)-&gt; DS3;</title>
        <p>DS3 has the same type as DS1 and is populated with data from DS1 that satisfies the condition if it
is executed for all instances of DS2. The condition is determined in the same way as in the previous
operation. Condition verification is valid within one instance of DS1.</p>
      </sec>
      <sec id="sec-6-3">
        <title>SetFilter (DS1, DS2, AOlist, BOlist  COlist) -&gt; DS3;</title>
        <p>- it is the operation for set comparison. DS1, DS2 and DS3 are data sets, and the resulting data set
DS3 has the same type as DS1;</p>
        <p>AOlist and BOlist are attribute lists from DS1, and AOlist is attribute list from DS1.OWNER and
BOlist is attribute list from DS1.Member; COlist - list of attributes from DS2. Member;
 is a binary predicate of set comparison: , , , , =, .</p>
        <p>The order of actions is such:
a) a set of instances of DS1.OWNER is grouped by AOlist;
b) DS2.Member is projected by C;
c) from the groups {R1AOlist} are selected those instances for which the condition BOlist COlist
is fulfilled;</p>
        <p>d) into the resulting DS3 passes only those instances of DS1 that meet the specified condition.
5.2.</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Some other operations</title>
      <sec id="sec-7-1">
        <title>JOIN(DS1, DS2, condition) -&gt; DS3;</title>
        <p>This operation joins two data sets DS1, DS2, which are neighbors on the hierarchical path. D
(DS1. OWNER) = D (DS3. OWNER) – this means that their domains are equal; D (DS2.Member) =
D (DS3. Member) and D (DS1.Member) = D (DS2.OWNER). Namely, from the 2 two-level trees is
constructing three-level tree with subordination saving, then the intermediate level is removed and
again we get a 2-level tree; by means of a condition the necessary copies are selected; the condition
may include constants and fields of all records from DS1 and DS2.</p>
      </sec>
      <sec id="sec-7-2">
        <title>JOIN*(DS1, DS2, condition) -&gt; DS3 ;</title>
        <p>Such type of operation will be appropriate when there is another DS on the hierarchical path
between DS1 and DS2; its OWNER will be the same type as DS1.Member, and its Member will be
the same type as DS2.OWNER, then we will get DS3, such as D(DS1.OWNER) = D(DS3.OWNER),
and D(DS2.Member) = D(DS3.Member).</p>
      </sec>
      <sec id="sec-7-3">
        <title>JOINMember (DS1, DS2, condition) -&gt; R;</title>
        <p>Another one specific type of connection, oriented on the situation when DS1 and DS2 have a
common Member, which implements a connection between two objects of the type "many-to-many"
(ER-model). The result will be a relationship that is DS1.OWNER and satisfies the condition.</p>
      </sec>
      <sec id="sec-7-4">
        <title>COUNTMember(DS1) -&gt; DS2;</title>
        <p>For this operation DS2.OWNER = DS1.OWNER, but instead of the DS2. Member for each
OWNER the corresponding quantity of elements is substituted.</p>
      </sec>
      <sec id="sec-7-5">
        <title>COMPOSE(REC1, REC2, condition) -&gt; DS1;</title>
        <p>REC1 and REC2 are the records (or more exactly relationships) from which DS1 is formed, REC1
is forming the OWNER of the data set and REC2 is forming its Member. REC2 must have an attribute
(or group of attributes) that is a foreign key, and for REC1 it is a primary key. Symbolic addressing
between such relations will be transformed to more efficient relative. The condition is required to
specify such attributes.</p>
      </sec>
      <sec id="sec-7-6">
        <title>ADDMember(DS, REC, condition)</title>
        <p>adds a REC record to the DS as a Member; condition is used for specification as in previous
operation. This operation is convenient when we need to add some record to the data set and connect
it with some particular owner; such connection is specified by condition.</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>6. Query examples</title>
    </sec>
    <sec id="sec-9">
      <title>7. Conclusion</title>
      <p>Let us consider a few examples of queries in the subject area, which was described earlier (Table 4
– Table 10). Each query will be presented in natural English, in terms of the original Dribas algebra
(left column) and by means of proposed supplement algebra (right column).</p>
      <p>The proposed extensions to classical relational algebra allow us, on the one hand, to increase the
efficiency of query execution, and on the other hand, to reduce the gap between DML and SQL. From
the given examples it is seen that the notation of some queries in terms of the proposed algebra looks
more compact.</p>
      <p>Find hospital names and address for the hospitals with rank = “xxx”.</p>
      <p>Fβ(Hosp, Rank = “xxx”) -&gt; R1; BFilter(HD, Rank = “xxx”) -&gt; DS1;
R1[Hname, Hadress] -&gt; res; PROJECT-OWNER(DS1,[Hname, Hadress]) -&gt; res;
For such simple query proposed algebra has no benefits in comparison with traditional relation
algebra.</p>
      <p>Find department names and hospital number in the hospitals with rank = “xxx”.</p>
      <p>Fβ(Hosp, Rank = “xxx”) -&gt; R1; BFilter(HD, Rank = “xxx”&amp; NotEmptyMember) -&gt;
F( Dep, R1,Dep.h# = R1.h#) -&gt; R2; DS1;
R2[Dep.h#, Dname] -&gt;res; PROJECT (DS1, [h#], [Dname]) -&gt;res
Supplementary algebra uses one operation less than relational algebra.</p>
      <p>Find the chamber names from hospital №1, where there are no patients with a temperature &gt; 37
(Fβ(Pat, temp &gt;37)) -&gt; R1; BFilter(CP, temp &gt;37) -&gt; DS1;
(Pat \ R1)[c#] -&gt; R2; F(Ch, R2, Ch.c#=R2.c#) -&gt; CP \ DS1 -&gt; DS2;
R3; R3[Cname] -&gt; res; PROJECT(DS2, [Cname], []) -&gt; res;
Relation algebra has 4 operations while proposed algebra needs 3.</p>
      <p>Find the patient names consulted by Dr. Sidorchuk.</p>
      <p>Fβ(Ph, Pname = “ Sidorchuk ”) -&gt; R1; JOINMember(PCon,PhCon, PCon.Con.r# =
F(Con,R1,Con.p#=R1.p#)-&gt;R2; PhCon.Con.r# &amp; PhCon.Ph.Pname = “ Sidorchuk
F(Pat,R2, Pat.t#=R2.t#) -&gt;R3; ”) -&gt; R1;
R3[Tname] -&gt; res; R1[Tname] -&gt; res;
This query is performed on the base of connection of “many-to-many” type.</p>
      <p>Find the patient names who are consulted only by those physicians who consulted the patient “xxx”
by name.
(Fβ(Pat, Tname = “xxx”))[t#] -&gt; R1; Join*(PatPh, PhPat) -&gt; DS1;
F(Con,R1,Con.t#=R1.t#)-&gt;R2; OnlyFilter(DS1,Member.Tname=”xxx”)
R2[p#] -&gt; R3; Con[p#,t#] -&gt; R4;
Fs (R4, R3, t#, R4.p# R2.p#) -&gt; R5;
F(Pat,R5, Pat.t#=R5.t#) -&gt;R3;
R3[Tname] -&gt; res;
This query is performed on the base of connection of “many-to-many” type. OnlyFilter operation is
the special case of the SetFilter operation; it is equivalent to SetFilter (DS1, DS1.Owner,
DS1.Member, , condition). Its running algorithm may be the follows: firstly we mark such
memberrecords for which the condition is FALSE and then for each owner-record its subordinate records are
verified while marked one is appeared. If it will be no marked records among the subordinate records
then such owner-record should be added to the result.</p>
    </sec>
    <sec id="sec-10">
      <title>8. References</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Codd</surname>
            ,
            <given-names>E.F.</given-names>
          </string-name>
          <article-title>A Relational Model of Data for Large Shared Data Banks // Communications of the ACM: journal</article-title>
          ,
          <year>1970</year>
          , Vol.
          <volume>13</volume>
          , no. 6,
          <string-name>
            <surname>P.</surname>
          </string-name>
          377-
          <fpage>387</fpage>
          , doi:10.1145/362384.362685
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Dribas</surname>
            <given-names>V.P.</given-names>
          </string-name>
          <article-title>Relational models of databases</article-title>
          .// Publ. BGU. Minsk.
          <year>1982</year>
          ,
          <volume>192</volume>
          р.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Date</surname>
            <given-names>C.J.</given-names>
          </string-name>
          <article-title>An Introduction to Database Systems 6th edn</article-title>
          . Reading, MA: Adison-Wesley.
          <year>1995</year>
          ,
          <volume>1328</volume>
          p.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Olle</surname>
            <given-names>T.W.</given-names>
          </string-name>
          ,
          <article-title>The CODASYL approach to data base management, A</article-title>
          .
          <string-name>
            <surname>Wiley-Interscience</surname>
            <given-names>Publication</given-names>
          </string-name>
          , John Wiley &amp; Sons,
          <year>1978</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>CODASYL</given-names>
            <surname>Database Task Group Report.</surname>
          </string-name>
          (
          <year>1971</year>
          ). ACM, New York,
          <year>April 1971</year>
          ,
          <volume>487</volume>
          p.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Chen</surname>
            <given-names>P.P.</given-names>
          </string-name>
          <string-name>
            <surname>The</surname>
          </string-name>
          Entity-Relationship model
          <article-title>- Toward a unified view of data</article-title>
          .
          <source>ACM Trans. Database Systems</source>
          ,
          <volume>1</volume>
          (
          <issue>1</issue>
          ),
          <year>1976</year>
          ,
          <fpage>9</fpage>
          -
          <lpage>36</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <article-title>[7] Building a robust, governed data lake for AI, IBM Hybrid Data Management</article-title>
          , https://www.ibm.com/downloads/cas/RMAMZNRY (Nov.
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Botelho</surname>
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bigelow</surname>
            <given-names>S.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Big</surname>
            <given-names>Data</given-names>
          </string-name>
          , (
          <year>Nov</year>
          .
          <year>2021</year>
          ), https://searchdatamanagement.techtarget.com/definition/big-data
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Tlamelo</given-names>
            <surname>Emmanuel</surname>
          </string-name>
          , Thabiso Maupong, Dimane Mpoeleng, Thabo Semong, Banyatsang Mphago and
          <string-name>
            <given-names>Oteng</given-names>
            <surname>Tabona</surname>
          </string-name>
          ,
          <article-title>A survey on missing data in machine learning</article-title>
          ,
          <source>Journal of Big Data</source>
          <volume>8</volume>
          ,
          <issue>N140</issue>
          (
          <year>2021</year>
          ), https://journalofbigdata.springeropen.com/articles/10.1186/s40537-021-00516-9
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Sai</surname>
            <given-names>Vennam</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cloud</surname>
            <given-names>Computing</given-names>
          </string-name>
          , (
          <issue>18 August 2020</issue>
          ), https://www.ibm.com/cloud/learn/cloudcomputing
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Steve</surname>
            <given-names>Ranger,</given-names>
          </string-name>
          <article-title>An introduction to cloud computing right from the basics up to IaaS and PaaS, hybrid, public, and private cloud, AWS and Azure</article-title>
          . https://www.zdnet.com/article/what-is
          <article-title>-cloudcomputing-everything-you-need-to-know-about-the-cloud/ (Nov</article-title>
          .
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>