What's the difference between DBMS, database engine and storage engine?










3















I am not from a CS / software engineering background but recently I have started begin self studying on Flask web development with Python.



I am currently on the "Database" topic and upon doing further research on this topic on the internet, I have came across a few terminology, which are database, DBMS, database engine and storage engine. Different sources in the Internet seems to be giving a different definitions of the above.



From the internet and Miguel Grinberg's web development book, this are some of the points that I am confused about:



  1. In Miguel's Grinberg book, the author seems to be inferring that database engine = DBMS = software applications like MySQL, SQLite, Postgres etc.

    Source: Pg 53 of Miguel Grinberg's book under the Database chapter


  2. In Wikipedia, database engine (or storage engine, which is stated in Wikipedia) is mentioned to be software application like InnoDB, MyISAM, Aria etc.
    Link: https://en.wikipedia.org/wiki/Database_engine


  3. In Quora, a commenter (Stephen Kinght) was saying that DBMS and database engine is two different entities, whereby database engine is just part of a component in the DBMS which is in charge of managing the database.

    Link: https://www.quora.com/What-are-some-database-storage-engines


So, based on the three points above, the questions that I have in mind are as follow:



  1. Is DBMS = database engine / storage engine = software applications like MySQL, SQLite, Postgres etc?

    OR


  2. Is DBMS != database engine / storage engine? (whereby DBMS = MySQL, SQLite, Postgres and database engine / storage engine = InnoDB, Aria, MyISAM etc respectively?)


I really appreciate if someone could help to clear my doubts on this terminology. I have tried doing research on the Internet and also going through the post in Stack Overflow but I still can't really get the concept right.



Thanks!










share|improve this question


























    3















    I am not from a CS / software engineering background but recently I have started begin self studying on Flask web development with Python.



    I am currently on the "Database" topic and upon doing further research on this topic on the internet, I have came across a few terminology, which are database, DBMS, database engine and storage engine. Different sources in the Internet seems to be giving a different definitions of the above.



    From the internet and Miguel Grinberg's web development book, this are some of the points that I am confused about:



    1. In Miguel's Grinberg book, the author seems to be inferring that database engine = DBMS = software applications like MySQL, SQLite, Postgres etc.

      Source: Pg 53 of Miguel Grinberg's book under the Database chapter


    2. In Wikipedia, database engine (or storage engine, which is stated in Wikipedia) is mentioned to be software application like InnoDB, MyISAM, Aria etc.
      Link: https://en.wikipedia.org/wiki/Database_engine


    3. In Quora, a commenter (Stephen Kinght) was saying that DBMS and database engine is two different entities, whereby database engine is just part of a component in the DBMS which is in charge of managing the database.

      Link: https://www.quora.com/What-are-some-database-storage-engines


    So, based on the three points above, the questions that I have in mind are as follow:



    1. Is DBMS = database engine / storage engine = software applications like MySQL, SQLite, Postgres etc?

      OR


    2. Is DBMS != database engine / storage engine? (whereby DBMS = MySQL, SQLite, Postgres and database engine / storage engine = InnoDB, Aria, MyISAM etc respectively?)


    I really appreciate if someone could help to clear my doubts on this terminology. I have tried doing research on the Internet and also going through the post in Stack Overflow but I still can't really get the concept right.



    Thanks!










    share|improve this question
























      3












      3








      3








      I am not from a CS / software engineering background but recently I have started begin self studying on Flask web development with Python.



      I am currently on the "Database" topic and upon doing further research on this topic on the internet, I have came across a few terminology, which are database, DBMS, database engine and storage engine. Different sources in the Internet seems to be giving a different definitions of the above.



      From the internet and Miguel Grinberg's web development book, this are some of the points that I am confused about:



      1. In Miguel's Grinberg book, the author seems to be inferring that database engine = DBMS = software applications like MySQL, SQLite, Postgres etc.

        Source: Pg 53 of Miguel Grinberg's book under the Database chapter


      2. In Wikipedia, database engine (or storage engine, which is stated in Wikipedia) is mentioned to be software application like InnoDB, MyISAM, Aria etc.
        Link: https://en.wikipedia.org/wiki/Database_engine


      3. In Quora, a commenter (Stephen Kinght) was saying that DBMS and database engine is two different entities, whereby database engine is just part of a component in the DBMS which is in charge of managing the database.

        Link: https://www.quora.com/What-are-some-database-storage-engines


      So, based on the three points above, the questions that I have in mind are as follow:



      1. Is DBMS = database engine / storage engine = software applications like MySQL, SQLite, Postgres etc?

        OR


      2. Is DBMS != database engine / storage engine? (whereby DBMS = MySQL, SQLite, Postgres and database engine / storage engine = InnoDB, Aria, MyISAM etc respectively?)


      I really appreciate if someone could help to clear my doubts on this terminology. I have tried doing research on the Internet and also going through the post in Stack Overflow but I still can't really get the concept right.



      Thanks!










      share|improve this question














      I am not from a CS / software engineering background but recently I have started begin self studying on Flask web development with Python.



      I am currently on the "Database" topic and upon doing further research on this topic on the internet, I have came across a few terminology, which are database, DBMS, database engine and storage engine. Different sources in the Internet seems to be giving a different definitions of the above.



      From the internet and Miguel Grinberg's web development book, this are some of the points that I am confused about:



      1. In Miguel's Grinberg book, the author seems to be inferring that database engine = DBMS = software applications like MySQL, SQLite, Postgres etc.

        Source: Pg 53 of Miguel Grinberg's book under the Database chapter


      2. In Wikipedia, database engine (or storage engine, which is stated in Wikipedia) is mentioned to be software application like InnoDB, MyISAM, Aria etc.
        Link: https://en.wikipedia.org/wiki/Database_engine


      3. In Quora, a commenter (Stephen Kinght) was saying that DBMS and database engine is two different entities, whereby database engine is just part of a component in the DBMS which is in charge of managing the database.

        Link: https://www.quora.com/What-are-some-database-storage-engines


      So, based on the three points above, the questions that I have in mind are as follow:



      1. Is DBMS = database engine / storage engine = software applications like MySQL, SQLite, Postgres etc?

        OR


      2. Is DBMS != database engine / storage engine? (whereby DBMS = MySQL, SQLite, Postgres and database engine / storage engine = InnoDB, Aria, MyISAM etc respectively?)


      I really appreciate if someone could help to clear my doubts on this terminology. I have tried doing research on the Internet and also going through the post in Stack Overflow but I still can't really get the concept right.



      Thanks!







      database






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 16 '18 at 7:27









      user10661325user10661325

      162




      162






















          2 Answers
          2






          active

          oldest

          votes


















          5














          A DBMS must always include a storage engine to play their role. That's modulo the in-memory-only systems that are deliberately designed to lose all data once switched off (and of which it might for that reason be considered questionable to call them 'DBMS' in the first place).



          But a DBMS does more for a user than a mere storage engine does. E.g. a DBMS also performs integrity checks on the data presented by the user during database updating.



          And DBMS stands for Data Base Management System which clearly indicates that it is a software (/engine) used for the purpose of managing a database (an organized collection of data).



          So by conventional wisdom, you'd have DBMS = database engine = IMS / IDMS / DB2 / PostgreSQL / ... and storage engine = storage component used by a DBMS, often proprietary and in fact unnamed but not always, with some of the "named" storage engines MyISAM, InnoDB, Microsoft Jet, BerkeleyDB (???) and possibly others.



          Unfortunately a vast majority of database practitioners in the industry are guilty of using these terms interchangeably, sloppily and wrongly, thereby causing/contributing to/perpetuating the very confusion that caused you to ask this question. You've been warned :-)






          share|improve this answer
































            1














            I would consider DBMS to refer to the software product as a whole - PostgreSQL, Oracle, DB2 etc.



            These are large, complex products, however. As is usual for complex software they are split into components, each with its own specific function and with well-defined interfaces between them. One component will deal with validating and parsing SQL; one will look after memory; another will handle IO, and so on. This last - the IO one - is often referred to as the storage engine, I guess because it "drives" the data to and from disk. Why it's called an engine rather than a component or sub-system is anyone's guess.



            There is no ISO standard for these names. So any vendor, academic or bloggist is free to use, re-use and define the terms as he or she sees fit.



            Some DBMS allow for a variety of IO components, each implementing different technologies. MySQL has InnoDB and MyISAM. MongoDB has WiredTiger and MMap. SQL Server has different on-disk formats and behind-the-scenes algorithms if the data is in "normal" tables, in-memory tables, or has a columnstore index. These could be thought of as different storage engines if that is the terms the author choses to use.



            Since the basic purpose of a DBMS is to store and retrieve data it is easy to see how the storage part can become synonymous with the product as a whole. From this perspective the other components are seen as ancillary to storage. Perhaps this was true once. In modern systems that support sophisticated authentication, multi-model APIs and memory-only storage I think this would no longer be defensible.






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function ()
              StackExchange.using("externalEditor", function ()
              StackExchange.using("snippets", function ()
              StackExchange.snippets.init();
              );
              );
              , "code-snippets");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "1"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53333241%2fwhats-the-difference-between-dbms-database-engine-and-storage-engine%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              5














              A DBMS must always include a storage engine to play their role. That's modulo the in-memory-only systems that are deliberately designed to lose all data once switched off (and of which it might for that reason be considered questionable to call them 'DBMS' in the first place).



              But a DBMS does more for a user than a mere storage engine does. E.g. a DBMS also performs integrity checks on the data presented by the user during database updating.



              And DBMS stands for Data Base Management System which clearly indicates that it is a software (/engine) used for the purpose of managing a database (an organized collection of data).



              So by conventional wisdom, you'd have DBMS = database engine = IMS / IDMS / DB2 / PostgreSQL / ... and storage engine = storage component used by a DBMS, often proprietary and in fact unnamed but not always, with some of the "named" storage engines MyISAM, InnoDB, Microsoft Jet, BerkeleyDB (???) and possibly others.



              Unfortunately a vast majority of database practitioners in the industry are guilty of using these terms interchangeably, sloppily and wrongly, thereby causing/contributing to/perpetuating the very confusion that caused you to ask this question. You've been warned :-)






              share|improve this answer





























                5














                A DBMS must always include a storage engine to play their role. That's modulo the in-memory-only systems that are deliberately designed to lose all data once switched off (and of which it might for that reason be considered questionable to call them 'DBMS' in the first place).



                But a DBMS does more for a user than a mere storage engine does. E.g. a DBMS also performs integrity checks on the data presented by the user during database updating.



                And DBMS stands for Data Base Management System which clearly indicates that it is a software (/engine) used for the purpose of managing a database (an organized collection of data).



                So by conventional wisdom, you'd have DBMS = database engine = IMS / IDMS / DB2 / PostgreSQL / ... and storage engine = storage component used by a DBMS, often proprietary and in fact unnamed but not always, with some of the "named" storage engines MyISAM, InnoDB, Microsoft Jet, BerkeleyDB (???) and possibly others.



                Unfortunately a vast majority of database practitioners in the industry are guilty of using these terms interchangeably, sloppily and wrongly, thereby causing/contributing to/perpetuating the very confusion that caused you to ask this question. You've been warned :-)






                share|improve this answer



























                  5












                  5








                  5







                  A DBMS must always include a storage engine to play their role. That's modulo the in-memory-only systems that are deliberately designed to lose all data once switched off (and of which it might for that reason be considered questionable to call them 'DBMS' in the first place).



                  But a DBMS does more for a user than a mere storage engine does. E.g. a DBMS also performs integrity checks on the data presented by the user during database updating.



                  And DBMS stands for Data Base Management System which clearly indicates that it is a software (/engine) used for the purpose of managing a database (an organized collection of data).



                  So by conventional wisdom, you'd have DBMS = database engine = IMS / IDMS / DB2 / PostgreSQL / ... and storage engine = storage component used by a DBMS, often proprietary and in fact unnamed but not always, with some of the "named" storage engines MyISAM, InnoDB, Microsoft Jet, BerkeleyDB (???) and possibly others.



                  Unfortunately a vast majority of database practitioners in the industry are guilty of using these terms interchangeably, sloppily and wrongly, thereby causing/contributing to/perpetuating the very confusion that caused you to ask this question. You've been warned :-)






                  share|improve this answer















                  A DBMS must always include a storage engine to play their role. That's modulo the in-memory-only systems that are deliberately designed to lose all data once switched off (and of which it might for that reason be considered questionable to call them 'DBMS' in the first place).



                  But a DBMS does more for a user than a mere storage engine does. E.g. a DBMS also performs integrity checks on the data presented by the user during database updating.



                  And DBMS stands for Data Base Management System which clearly indicates that it is a software (/engine) used for the purpose of managing a database (an organized collection of data).



                  So by conventional wisdom, you'd have DBMS = database engine = IMS / IDMS / DB2 / PostgreSQL / ... and storage engine = storage component used by a DBMS, often proprietary and in fact unnamed but not always, with some of the "named" storage engines MyISAM, InnoDB, Microsoft Jet, BerkeleyDB (???) and possibly others.



                  Unfortunately a vast majority of database practitioners in the industry are guilty of using these terms interchangeably, sloppily and wrongly, thereby causing/contributing to/perpetuating the very confusion that caused you to ask this question. You've been warned :-)







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 19 '18 at 7:59

























                  answered Nov 16 '18 at 10:40









                  Erwin SmoutErwin Smout

                  15.4k42249




                  15.4k42249























                      1














                      I would consider DBMS to refer to the software product as a whole - PostgreSQL, Oracle, DB2 etc.



                      These are large, complex products, however. As is usual for complex software they are split into components, each with its own specific function and with well-defined interfaces between them. One component will deal with validating and parsing SQL; one will look after memory; another will handle IO, and so on. This last - the IO one - is often referred to as the storage engine, I guess because it "drives" the data to and from disk. Why it's called an engine rather than a component or sub-system is anyone's guess.



                      There is no ISO standard for these names. So any vendor, academic or bloggist is free to use, re-use and define the terms as he or she sees fit.



                      Some DBMS allow for a variety of IO components, each implementing different technologies. MySQL has InnoDB and MyISAM. MongoDB has WiredTiger and MMap. SQL Server has different on-disk formats and behind-the-scenes algorithms if the data is in "normal" tables, in-memory tables, or has a columnstore index. These could be thought of as different storage engines if that is the terms the author choses to use.



                      Since the basic purpose of a DBMS is to store and retrieve data it is easy to see how the storage part can become synonymous with the product as a whole. From this perspective the other components are seen as ancillary to storage. Perhaps this was true once. In modern systems that support sophisticated authentication, multi-model APIs and memory-only storage I think this would no longer be defensible.






                      share|improve this answer



























                        1














                        I would consider DBMS to refer to the software product as a whole - PostgreSQL, Oracle, DB2 etc.



                        These are large, complex products, however. As is usual for complex software they are split into components, each with its own specific function and with well-defined interfaces between them. One component will deal with validating and parsing SQL; one will look after memory; another will handle IO, and so on. This last - the IO one - is often referred to as the storage engine, I guess because it "drives" the data to and from disk. Why it's called an engine rather than a component or sub-system is anyone's guess.



                        There is no ISO standard for these names. So any vendor, academic or bloggist is free to use, re-use and define the terms as he or she sees fit.



                        Some DBMS allow for a variety of IO components, each implementing different technologies. MySQL has InnoDB and MyISAM. MongoDB has WiredTiger and MMap. SQL Server has different on-disk formats and behind-the-scenes algorithms if the data is in "normal" tables, in-memory tables, or has a columnstore index. These could be thought of as different storage engines if that is the terms the author choses to use.



                        Since the basic purpose of a DBMS is to store and retrieve data it is easy to see how the storage part can become synonymous with the product as a whole. From this perspective the other components are seen as ancillary to storage. Perhaps this was true once. In modern systems that support sophisticated authentication, multi-model APIs and memory-only storage I think this would no longer be defensible.






                        share|improve this answer

























                          1












                          1








                          1







                          I would consider DBMS to refer to the software product as a whole - PostgreSQL, Oracle, DB2 etc.



                          These are large, complex products, however. As is usual for complex software they are split into components, each with its own specific function and with well-defined interfaces between them. One component will deal with validating and parsing SQL; one will look after memory; another will handle IO, and so on. This last - the IO one - is often referred to as the storage engine, I guess because it "drives" the data to and from disk. Why it's called an engine rather than a component or sub-system is anyone's guess.



                          There is no ISO standard for these names. So any vendor, academic or bloggist is free to use, re-use and define the terms as he or she sees fit.



                          Some DBMS allow for a variety of IO components, each implementing different technologies. MySQL has InnoDB and MyISAM. MongoDB has WiredTiger and MMap. SQL Server has different on-disk formats and behind-the-scenes algorithms if the data is in "normal" tables, in-memory tables, or has a columnstore index. These could be thought of as different storage engines if that is the terms the author choses to use.



                          Since the basic purpose of a DBMS is to store and retrieve data it is easy to see how the storage part can become synonymous with the product as a whole. From this perspective the other components are seen as ancillary to storage. Perhaps this was true once. In modern systems that support sophisticated authentication, multi-model APIs and memory-only storage I think this would no longer be defensible.






                          share|improve this answer













                          I would consider DBMS to refer to the software product as a whole - PostgreSQL, Oracle, DB2 etc.



                          These are large, complex products, however. As is usual for complex software they are split into components, each with its own specific function and with well-defined interfaces between them. One component will deal with validating and parsing SQL; one will look after memory; another will handle IO, and so on. This last - the IO one - is often referred to as the storage engine, I guess because it "drives" the data to and from disk. Why it's called an engine rather than a component or sub-system is anyone's guess.



                          There is no ISO standard for these names. So any vendor, academic or bloggist is free to use, re-use and define the terms as he or she sees fit.



                          Some DBMS allow for a variety of IO components, each implementing different technologies. MySQL has InnoDB and MyISAM. MongoDB has WiredTiger and MMap. SQL Server has different on-disk formats and behind-the-scenes algorithms if the data is in "normal" tables, in-memory tables, or has a columnstore index. These could be thought of as different storage engines if that is the terms the author choses to use.



                          Since the basic purpose of a DBMS is to store and retrieve data it is easy to see how the storage part can become synonymous with the product as a whole. From this perspective the other components are seen as ancillary to storage. Perhaps this was true once. In modern systems that support sophisticated authentication, multi-model APIs and memory-only storage I think this would no longer be defensible.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 18 '18 at 10:00









                          Michael GreenMichael Green

                          1,20111422




                          1,20111422



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53333241%2fwhats-the-difference-between-dbms-database-engine-and-storage-engine%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Top Tejano songwriter Luis Silva dead of heart attack at 64

                              ReactJS Fetched API data displays live - need Data displayed static

                              Evgeni Malkin