【问题标题】:When should I use C++ instead of SQL?什么时候应该使用 C++ 而不是 SQL?
【发布时间】:2011-09-29 14:49:27
【问题描述】:

我是一名 C++ 程序员,偶尔使用 MySQL 来处理数据库,但我的 SQL 知识相当有限。不过我肯定愿意改变这一点。

目前,我正在尝试仅使用 SQL 查询对数据库中的数据进行分析(!)。但我准备放弃了,转而将数据导入C++,用C++代码进行分析。

我和同事讨论过这个问题,他们也推动我使用 C++,说 SQL 不是用于复杂分析,而是主要用于导入(从现有表)和导出(到新表)数据,以及多一点,例如将数据合并到 - 例如- 加入表格。

谁能帮我画一条线?所以我知道什么时候切换到 C++?当然性能也是一个问题。

SQL 中的事情变得复杂的迹象是什么?或者,也许我只是在设计查询时采用了错误的方法。那么我在哪里可以找到教程、书籍……以采取更好的方法?

我希望这不是太模糊。我真的有点失落了。

【问题讨论】:

  • 感谢您的所有回答。我看到人们希望这个问题被关闭。我猜是因为它太模糊了,导致“意见”,而不是“事实”。我明白。但是我必须说这些答案对我有很大帮助,并且看着它们,我看到经验丰富的程序员的良好推理将“观点”变成了“事实”。也有相当多的人将我的问题评为 +1,这表明有更多的人喜欢看到这个“问题”的答案。

标签: c++ mysql sql data-analysis


【解决方案1】:

SQL 擅长分析大型关系数据集

画线的地方就是你分析的规模。

如果您一次分析单个记录,请在您的应用程序中进行。

如果您将大量记录集作为一个单元进行分析,SQL 绝对是完成这项工作的最佳工具。

逐行分析并不是 SQL 设计或优化的目标。但是,如果您想了解有关一百万行数据的信息,请在数据库中进行。

【讨论】:

  • 什么是逐行分析?体力劳动?那么 SQL 在选择这些行(过滤)方面成为非常有效的工具......
  • @topchef - 想想CURSORWHILE LOOP - 这些是逐行操作。
  • @Topchef - 可以对单个记录进行分析
  • 这是术语论点,所以它们是徒劳的。我相信您给出的答案正是您所寻求的。
【解决方案2】:

我和同事讨论过这个问题,他们也推动我使用 C++,说 SQL 不是用于复杂分析,而是主要用于导入(从现有表)和导出(到新表)数据,以及多一点,例如将数据合并到 - 例如- 加入表格。

这完全是任意的。学习 SQL。网上有很多免费的资源。

【讨论】:

    【解决方案3】:

    只要您知道如何使用 SQL 提供的功能,您就可以在 SQL 中对数据进行非常复杂的分析。

    SQL 具有执行关系操作的功能,例如连接和投影。也用于执行集合操作,如联合、交集和限制(子集)。也用于对数字进行基本算术运算,如四个算术运算符,以及 SQRT 等内置函数。还有统计函数,如 COUNT、SUM 和 AVG,可以以非常有趣的方式与预测相结合。一个好的 DBMS 可以让您使用自己用 C、C++ 或 PL/SQL 编写的函数来扩展内置函数。

    您从这些功能中获得的力量取决于数据库的设计程度。一个设计良好的数据库符合关系模型,并且应该与您对数据的预期用途相关。

    SQL 代码可以存储在存储过程中的数据库中。它可以存储在 SQL 脚本文件中。而且,如您所知,它可以嵌入到应用程序中。除了 SQL,您还可以使用 OLAP 工具和报告生成器非常轻松地对数据执行标准操作。

    建议您使用 C++ 进行所有处理的人听起来好像他们已经学会了使用像一个大而愚蠢的文件系统这样的数据库。一个好的 DBMS 远不止这些。

    【讨论】:

      【解决方案4】:

      SQL 通常非常有效地处理自己的数据库(取决于服务器实现)。

      您应该使用查询来分析数据库。
      主要原因是通信开销。
      即使服务器在本地机器上(远程服务器会有明显的通信开销),您仍然必须将存储的信息从 SQL 服务器检索到您的 c++ 程序进行分析。

      现在,如果您在 SQL 中有 10000 行,您将不得不让 SQL 服务器读取它们全部并将它们发送到您的程序,在那里它可能会创建数据的本地副本供您处理。

      如果您让 SQL 服务器处理查询,您将获得它根据您正在执行的查询类型执行的复杂优化,最后您只能检索有限数量的数据(您实际需要)通过沟通。

      【讨论】:

        【解决方案5】:

        您做出了正确的决定,开始使用 SQL 进行数据分析。现在,当您觉得自己的 SQL 知识限制了您时,您有 2 个选择:放弃并切换回熟悉但效率不高的工具集 (C++) 或提高您的 SQL 水平。

        SQL 也可能在某些时候变得过于复杂,但 C++ 也不会成为答案 - 很可能是一些专门的工具。

        【讨论】:

          【解决方案6】:

          在我看来,如果数据库服务器没有提供等效的分析功能,你应该只在 C++ 中进行分析,因为数据库服务器非常智能,很难甚至不可能超过数据库服务器分析功能的算法效率.将原始数据带入应用程序进行分析也包括大量开销。

          如果在某些时候普通 SQL 变得过于复杂,服务器的本地 PL 可能是一个不错的选择

          【讨论】:

            【解决方案7】:

            我同意 JNK 和 Jochai,但不同意 Ascanio。 最好提高数据库系统方面的知识。 Sql自带

            【讨论】:

              【解决方案8】:

              所以,这是我一直在考虑的事情,在我看来,SQL 作为一种用于存储/操作数据的平台/语言,与 C++ 或 C 库相比应该没有固有的优势。在我看来,理论上你可以构建一个 C++ 库,即使不是更有效,也可以比 SQL 更有效。这样做,您将能够从头开始构建它,就整数、字符、字符串和其他数据类型的存储方式而言,并使其更容易与您的特定应用程序交互(如 Web 开发)。您甚至可以使用 javascript 之类的语言完成查询(让 Web 开发人员专注于学习一种语言)。

              【讨论】:

                猜你喜欢
                • 2019-06-15
                • 2011-06-22
                • 2015-12-11
                • 2012-02-12
                • 2012-06-27
                • 2010-11-29
                • 2015-12-23
                • 1970-01-01
                相关资源
                最近更新 更多