且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《PostgreSQL服务器编程》一一1.10 总结——为什么在服务器中进行程序设计

更新时间:2022-10-02 15:11:34

本节书摘来自华章计算机《PostgreSQL服务器编程》一书中的第1章,第1.10节,作者:(美)Hannu Krosing, Jim Mlodgenski, Kirk Roybal 著
,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.10 总结——为什么在服务器中进行程序设计

我们在服务器端完成大部分数据操作编程工作,主要优势有以下几点。
1.10.1 性能
我们进行基于数据的计算几乎总是性能为王,也就是,我们会努力使获得数据的时间周期变得更短。通常在一个典型的数据密集型计算中,我们的大多数时间都集中花费在获得数据上。因此,在计算中,如何使数据访问变得更快就是使整个计算过程变得更高效的***方法。在我的笔记本电脑上,从100000行记录的数据库中,随机查询一行并返回客户端需要花费2.2ms,但是在数据库内部获取数据,这个操作仅仅花费0.12ms。这是快了20倍的性能表现,并且这是客户端与服务器在同一台使用UNIX套接字的机器上运行的结果。如果客户端与服务器之间使用了网络连接,那么这个差距将会变得更大。
一个真实的小故事:
我的一个朋友被叫到一家大公司帮忙(我确定你们肯定都知道这家公司,但是我不能告诉你是哪家),公司希望能让他们的电子邮件发送程序运行得更快速。这家公司已经使用了最新的Java EE技术,实现了自己的电子邮件生成系统,首先从数据库获得数据,然后在服务间传送数据,并且进行几次的序列化与反序列化工作,最后在数据上进行XSLT转换从而产生电子邮件正文。最终的结果是他们每秒钟仅生成了几百封邮件,并且造成反应速度的严重下滑。
当我朋友重写这个进程的时候,他使用数据库内的PL/Perl函数格式化数据,并且使这个查询返回的是完全格式化的电子邮件,就这样,这个程序每秒钟突然开始涌出上万封的电子邮件,然后他们必须增加发送邮件程序的另一个副本,才能将这些邮件发送出去。
1.10.2 易于维护
如果所有的数据操作代码都位于数据库内,那么要么是数据库函数要么是视图,实际的升级过程就会变得非常简单。我们要完成所有这些操作,所需要的仅仅是运行一个DLL脚本(这些脚本重新定义了函数),这样所有的客户端就自动地使用最新的代码,而完成这样的过程不需要停机时间,也不需要几个前端系统和团队之间复杂的协调处理。
1.10.3 保证安全的简单方法
对于存在潜在风险的服务器,如果所有访问都采用函数方式,并且仅仅为数据库的用户授权他们所需的函数,其他函数均不予授权,这样他们无法看到表数据,甚至不知道这些表的存在。所以即使当服务器被恶意破坏,用户可以做的事情也只是不停地调用同一个函数。而且,即便用户使用了自己编写的查询,比如SELECT * FROM users;来获取数据库中的所有数据,也不可能发生盗取密码、邮件或其他敏感信息的情况。
最重要的是,在服务器上开发程序是最有趣的。