何时应该使用C++而不是SQL?

26
我是一名C++程序员,偶尔会使用MySQL处理数据库,但我的SQL知识相对有限。然而,我很愿意改变这种情况。
目前,我正在尝试只使用SQL查询对我在数据库中拥有的数据进行分析。但我即将放弃,并导入数据到C++中,使用C++代码进行分析。
我已经与同事讨论过这个问题,他们也鼓励我使用C++,认为SQL并不适用于复杂分析,而主要用于导入(从现有表)和导出(到新表)数据,以及一些类似将数据合并到联接表等操作。
可以有人帮忙划定一个界限吗?让我知道何时应该转向C++?当然,性能也是一个问题。
什么是SQL变得太复杂的指标?或者我只是在设计查询时采用了错误方法。那么在哪里可以找到教程、书籍等资源,以更好地进行分析?
希望我的问题不会太模糊。我真的有点迷茫。

10
感谢您所有的回答。我看到人们想要关闭这个问题。我猜是因为它太模糊了,导致了"观点"而不是"事实"。我理解。不过,我必须说这些答案对我帮助很大,看着它们,我看到经验丰富的程序员的好推理将"观点"变成了"事实"。此外,有数量可观的人给我的问题评分+1,这表明还有更多的人喜欢看到这个"问题"的答案。 - AudioDroid
8个回答

26

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

在分析规模上要有所取舍。

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

如果您将大量记录作为一个整体进行分析,SQL 明显是最好的工具。

逐行分析不是 SQL 设计或优化得很好的功能。但是,如果您想获取有关一组包含一百万行数据的信息,请在数据库中执行。


什么是逐行分析?手动工作?那么 SQL 变成了在选择这些行(过滤)方面非常有效的工具... - topchef
@topchef - 想象一下CURSORWHILE LOOP- 这些是逐行操作。 - JNK
@Topchef - 可以对单个记录进行分析。 - JNK
2
它是术语参数,所以它们是无用的。我相信你给出了确切寻求的答案。 - topchef

7

我已经和我的同事讨论过这个问题,他们也推荐我使用C++,认为SQL并不适用于复杂的分析,而主要用于导入(从现有表格)和导出(到新表格)数据,以及一些其他操作,例如将数据合并到联接表中。

这完全是武断的。学习SQL吧。网上有很多免费的资源可供使用。


5
你可以在SQL中进行非常复杂的数据分析,只要你知道如何使用SQL提供的功能。SQL具有执行关系操作(如连接和投影)的功能。还可以执行集合操作,如并集、交集和限制(子集)。此外,它还可以对数字执行基本算术运算,例如四个算术运算符,以及内置函数如SQRT。同时,统计函数如COUNT、SUM和AVG可以与投影组合使用,产生非常有趣的结果。一个好的DBMS将允许您使用C、C++或PL/SQL编写自己的函数来扩展内置函数。
这些功能所带来的强大力量取决于数据库的设计质量。一个良好设计的数据库应符合关系模型,并且应与您打算使用的数据相关。
SQL代码可以存储在数据库中的存储过程中。它可以存储在SQL脚本文件中。正如你已经知道的那样,它可以嵌入应用程序中。除了SQL之外,您还可以使用OLAP工具和报表生成器轻松地处理数据。
那些建议您将所有处理都保留在C++中的人听起来就像是刚学会如何使用数据库作为一个大而愚蠢的文件系统。一个好的DBMS远不止于此。

4

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

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

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

如果您让SQL服务器通过查询执行此操作,您将获得它根据您执行的查询类型所做的复杂优化,并且最终您可以通过通信仅检索到有限数量的数据(您实际需要的数据)。


2
你做出了正确的决定,选择用SQL开始数据分析。现在,当你感到自己对SQL的知识有限时,你有两个选择:放弃并切换回熟悉但不是很高效的工具集(C++),或者提高你的SQL水平。
可能在某个时候,SQL也会变得太复杂,而C++也不是答案,最有可能需要使用一些专门的工具。

2
在我看来,只有在数据库服务器没有提供与分析函数等效的功能时,才应该使用C++进行分析。因为数据库服务器非常聪明,并且很难甚至几乎不可能打败数据库服务器的分析函数算法效率。而将原始数据带到应用程序中进行分析也包含了大量开销。
如果在某个时刻,纯SQL变得过于复杂,本地PL可能是一个不错的选择。

0

所以,这是我一直在思考的事情,对我来说,仅作为存储/操作数据的平台/语言的SQL,应该没有比C++或C库更好的固有优势。理论上讲,你可以构建一个与SQL同样高效,甚至更高效的C++库来做这件事情。通过这样的方式,您将能够从头开始构建它,以确定如何存储整数、字符、字符串和其他数据类型,并使其更容易与您的特定应用程序(如Web开发)进行接口。您甚至可以使查询在像JavaScript这样的语言中完成(允许Web开发人员专注于学习一种语言),使其更加简化。


0

我同意JNK和Jochai的观点,但不同意Ascanio的看法。 提高数据库系统知识是更好的选择。 SQL是其中的一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接