我应该为这个项目使用 Perl 还是 PHP 或其他东西?
Posted
技术标签:
【中文标题】我应该为这个项目使用 Perl 还是 PHP 或其他东西?【英文标题】:Should I use Perl or PHP or something else for this project? 【发布时间】:2011-02-02 02:04:58 【问题描述】:我即将开始一个项目,需要:
处理 XML 非xml文档的重文本解析 将 xml 和非 xml 文档中的数据插入到关系数据库中。 使用网页将处理后的数据从 db 呈现给用户。 必须很好地处理负载。网站会在短时间内承受非常重的页面负载(每分钟 300 多名访问者,持续几分钟),但大部分时间将处于空闲状态(每分钟十几名访问者)。
我在 Java 和 Web 服务方面有很强的背景,但我不想在这个项目中使用 Java,因为我想多样化我的技能。
我不是在征求您对您认为最好的语言的意见。您可能从自己的经验中认识到使用这些语言有哪些优点和缺点?
【问题讨论】:
当每分钟为 300 多个访问者提供服务时,您是否打算在线对非 xml 文档进行重文本解析? 弹片,是的,用户将发布需要动态解析的数据。在重载期间,我实际上可以期望每分钟 20-100 条这样的帖子。 我无意发起人气竞赛,我只是在寻找使用上述语言来满足我在 OP 中概述的要求的利弊。我会相应地调整问题。 除非您已经为此考虑了架构,否则似乎询问构建此架构的最佳方法可能是一个有用的问题,并且很可能会为该问题的答案提供信息。例如,将要处理的文档提交到队列以进行内联处理可以减轻一些前端负载问题,只要它们不需要立即可用。它还允许为 Web 和处理系统使用不同的语言,因此每个语言都可以发挥自己的优势。 @Robert P. “然后你决定通过 COBOL 的 C 绑定使用 pcre 库......现在你有三个问题” >-) 【参考方案1】:根据您的需要,您可能需要考虑一个已经支持缓存的框架,Drupal 就是一个例子,但还有很多其他例子。大多数框架都是可扩展的,因此您可以添加插件来处理所有解析和演示。
我认为语言不如您选择的框架重要。我个人会选择 php 而不是 Perl,因为我认为它更适用于现实世界。 Python 是另一种漂亮的脚本语言,但 php 在网络世界中具有最大的吸引力。如果您的目标是让您的技能更具市场价值,请选择 PHP。
【讨论】:
说真的,你对命名法这么挑剔吗? 是的,我们对使用正确名称来指代语言非常挑剔。 当任何人提到“PERL”时,他们很可能不熟悉现代 Perl。当人们总是将其仅称为“脚本语言”时也是如此 我承认我已经有 5 年没有使用过 Perl 了,但这并没有改变我的论点。如果您想要更多经验,那么市场渗透率最高的就是您应该选择的那个。它使您作为开发人员更具市场价值。【参考方案2】:由于我是 PHP 人,以下是我可以提供的关于 PHP 的内容
PHP scales well due to it's shared nothing architecture PHP has native support for various XML libs PHP has native support for a number of RDBMS PHP has native support for caching PHP has native support for webservices PHP is a templating engine所以 PHP 满足了您问题中对语言的要求。
但是,Perl、Python 或 Ruby 甚至服务器端 javascript (...) 都应该能够满足您的要求。 PHP 有它的怪癖,其他语言也是如此。如果您是 Java 专家,您可能会喜欢 Ruby 的语法,但话又说回来,只有您自己可以决定。
【讨论】:
PHP 5 具有 SimpleXML 类,这使得使用 XML 变得非常容易。 Gordon,感谢您提供这些出色的参考资料。虽然它们绝对是 PHP 的优点,但你能概述一下我可能遇到的任何缺点吗?另一个答案提到了UTF8的问题,你能确认或否认存在这样的问题吗? @Clinton 支持 Unicode 可能很麻烦。但是,有许多扩展可用于处理多字节和各种可用的字符编码。请参阅 de.php.net/manual/en/refs.international.php 和这篇 IBM 文章 ibm.com/developerworks/library/os-php-unicode/index.html - 我知道的一些批评是函数名称和参数顺序的命名方案不一致以及语法的冗长。看看de.php.net/manual/en/langref.php。如果您具有 Java 背景,那么 OOP 章节将会对您在这里了解 PHP 提供什么特别感兴趣。 @Sinan 我真的不明白你愤怒的语气,也不明白你在这里对“主观”的定义。 Gordon 提供了详细的信息,为什么 PHP 能够在众多其他语言中满足 OP 规定的要求。他并不是说“它会比(Perl|Ruby|任何其他语言)更好”,也不是“我会使用 PHP” @Sinan - 我必须承认,虽然我通常觉得 PHP 与 Perl 的***和你一样令人反感,但这个答案实际上对我来说非常无害,因为明确的“其他语言都应该能够从一开始就做你所要求的。虽然这使得它对 OP 的问题的用处稍小,因为它实际上并没有提供任何边际理由来选择一个或另一个 :)【参考方案3】:所有提到的语言都应该可以用于您的目的。但据我所知,PHP 在 UTF8 字符串方面可能有点棘手(例如,为由多个字节组成的 UTF8 字符获取正确的字符串长度)。但我相信有些人很快就会通过 cmets 为 PHP 提供好的解决方案 :-)
我个人最喜欢的是 Ruby。因为它提供了非常简单且功能强大的 API(所谓的 gems)来满足您的所有需求。
【讨论】:
用户发布的一些非xml数据将是德语或俄语,因此我需要解析以正确处理此类情况。 UTF8 字符处理 PHP 的一个已知问题吗? PHP5 中的原生字符串不支持 UTF8。因此,如果使用它们,您可能会遇到麻烦(例如 strpos() 返回字节数而不是字符数)。所以你必须考虑特定的 utf8 字符串函数。或者你会等待 PHP6,因为它被认为支持原生字符串的 UTF8,我们将看到。 PHP 5 没有对 Unicode 或多字节字符串的原生支持,这与 Perl 和 Python 不同,但是有 mbstring 模块。这个问题将在 PHP 6 中修复,但尚未发布。【参考方案4】:我会选择 Perl。 LibXML 系列模块提供了由快速 C 解析器支持的各种接口(DOM、XPath、XSLT 等)。
Perl 对文本切片和切块的正则表达式支持几乎是任何其他语言都无法比拟的。如果您希望进行大量任意文本处理,并且至少对 regex 有点熟悉,那么您会感谢自己。
还有一系列适用于 Perl 的出色 Web 框架,包括简单但功能强大的 Mojolicious 框架和综合性 Catalyst 框架。总是有古老而稳定的 CGI 库,但 Mojolicious 或 Catalyst 可能是更好的选择。
【讨论】:
如果您还不知道这一点,请明确一点:无论您使用 Perl 还是 PHP 或其他东西,除非您的服务器有无限的内存,否则永远不要对大型 XML 文档使用 DOM XML 解析器: )【参考方案5】:据我所知,PHP 的正则表达式(我假设您将使用它)PCRE library 来自 Perl。因此,如果您有很多非 XML 解析,那么您需要同时测试两者并查看哪个运行得更快。我不确定哪一个更快满足您的需求。
它们都很好地处理了 XML(最终)。
然而,PHP 只是一个庞大的社区。这个星球上没有其他脚本语言这么大。因此,如果这对您很重要,那么请使用 PHP,因为您可以找到关于它的所有信息。
但是,Perl 也有大量的追随者,我相信有很多教程可以满足您想做的所有事情。
Python 也是一种您可能想要研究的语言。哎呀,自从每个人都意识到 Ruby 是上帝给世界的礼物后,它也爆炸了!您可以诚实地用任何语言做您想做的事,因此您需要查看每种语言的语法并找出您最喜欢哪一种。您可以从那里运行一个简单的示例基准测试,看看哪种语言最符合您的需求。
无论您做什么 - 不要使用 wordpress 或 drupal 之类的“框架”。它们不是 CMS 的框架,而且非常缓慢和臃肿。 Wordpress 仅加载索引页就需要 8MB!
我们有一个 PHP 项目,一个来自 Java 的家伙加入了我们,一旦他掌握了一切的窍门,他就会在一两周内启动并运行。
【讨论】:
澄清:PCRE 库基于 perl regexen,但并不完全相同。【参考方案6】:为什么不试试 Ruby on Rails?
回到你的问题,我会说 PHP。由于您需要学习新知识,同时您应该有一个很棒的社区,您可以在其中找到支持。
PHP 可以满足您的所有要求。
【讨论】:
那么你的建议是什么,RoR 还是 PHP? ROR是我心里对GO说的吗?但由于 OP 的问题是 perl 或 PHP,我推荐他 PHP,因为你有很多支持。【参考方案7】:看起来你的大部分工作将处理数据而不是演示,在我看来这是 Perl 最擅长的。 Perl 对正则表达式的表现非常好,CPAN 上的大量模块可以帮助您解析常见格式。 Perl 中还有一些很好的框架可以让数据的呈现变得更轻松。新手的主要缺点是,在 CPAN 上针对您可能遇到的各种问题(XML 解析、Web 框架、ORM 等)有数十个发行版,很难决定使用哪一个。多亏了 Plack/PSGI,最近使用 Perl 与网络服务器通信变得非常非常好。
重要的是,“负载”是一个完全与语言无关的问题,因此这不是您选择哪种语言,而是您设计系统的方式决定了它处理增加的负载的能力。 Perl、Java、PHP 都被用于小型设置,一直到网络上一些流量最大的网站。如果增长取决于您未来的需求,请在适当的地方解耦并首先为未来的扩展进行设计。多个数据库服务器、缓存、消息/工作队列可以在小范围内使用,当需要更多资源时,将它们放在小范围内比重写或快速破解它们更容易。
【讨论】:
【参考方案8】:确实,这是一个非常主观的问题。我完全可以想象,在 2010 年,Perl 或 PHP(甚至 Python 或 Ruby)同样可以为您提供这样的项目。差异不在于语言本身,而在于工具、最佳实践和社区。p>
在这些语言中,我最熟悉 Perl,所以让我试着从这个角度提供一个关于您的需求的答案。
文本和 XML 解析: Perl 对非常长的文件(只要你 don't slurp)的文本解析具有非常强大的支持,并允许强大、清晰和简单的 regex programming。它具有清晰的内置Unicode support 和标准转码工具(Encode 模块),在用户界面方面非常方便。它还以标准、快速且维护良好的模块的形式直接绑定libxml2:XML::LibXML。
关系数据库支持:除了允许直接对许多 DBMS 进行 SQL 查询的标准数据库接口 (DBI) 之外,还有许多框架可以制作 DB-to-Webdoc管理更轻松,同时功能仍然强大。最著名的可能是Catalyst。
HTML 文档演示文稿: Mason 是我最喜欢的 Web 应用程序交付引擎。与 Perl 的集成非常优雅,但它不会牺牲模板模式或语言特性。
重负载处理:有多少负载问题需要解决,就有多少解决方案。 Perl 为 memcached 提供绑定:Cache::Memcached(用 Perl 编写)和 Cache::Memcached::Fast(用 C 编写)。
平衡一下你对语法和一般语言哲学的个人偏好,你很快就会加入Enlightened Perl社区:)
【讨论】:
【参考方案9】: Perl scales well Perl supports various XML libs Perl supports a large number of RDBMs 通过DBI Perl supports caching Perl supports web services 如SOAP、XML-RPC 等。 Perl has many template engines因此,您列表中的每一项都可以使用两种语言完成。考虑到自己的长处和短处,您应该选择您认为最有效率的那个。
【讨论】:
思南,感谢您提供这些参考资料。就像我在上面问 Gordon 一样,你能想到我在使用 Perl 时可能遇到的任何警告吗?【参考方案10】:我会使用 Common Lisp。
Closure XML 用于解析 XML cl-ppcre 是一个与 perl 兼容的正则表达式库,但根据您要解析的文本类型,您或许可以在 Common Lisp Directory 找到专门的解析器。 我不知道你想使用什么数据库,但是Postmodern 对 Postgres 来说非常好。还有更通用的CLSQL。 您可以使用Hunchentoot 作为网络服务器,例如,CL-WHO 来生成 HTML 页面。每秒 5 页应该没问题。【讨论】:
【参考方案11】:好的,所以每个人的答案都很主观,我也会添加我的。
使用 Java,核心支持所有你需要的东西(不需要框架),它的免费操作系统和它比 Perl - PHP 快 2 到 3 倍。
说真的…… PHP 是为 Web 项目而设计的,它很简单,并且支持你需要做的所有事情(试试Zend 框架),它有一个不错的学习曲线(Java 更难学习),有一个庞大的开发者社区可以提供帮助如果您遇到意想不到的事情(比 Pearl 和 Java 更大)。在性能方面,它比珍珠慢一点(我说的是普通的旧 PHP 脚本,没有奇怪的 Vodoo 优化),但它足以满足您的需求。
最后,我敢肯定,如果您使用 PHP(并且如果遵循所有编码和设计最佳实践),您将获得比使用 Perl 获得的更小一致性的应用程序。
(Java 更好……但我不想被一些 PHP ***者口头私刑)
【讨论】:
这个问题排除了一种且只有一种语言……Java。还有“珍珠”?真的吗? 好吧,尽管如此,我只是被所有可用的***分子私刑 没有人真正读过我的答案... =) 来吧,第一段是开玩笑的人!.. 回想起来不是考虑到结果,这是一个非常好的结果,但请尝试阅读其余部分……为你们感到羞耻! =P【参考方案12】:使用 Perl,如果您没有这两种方法的经验并且您的目标是让自己更有市场。
如果您需要在“专业经验”部分保护这两个条目,那么伪造 PHP 经验要容易得多。
【讨论】:
【参考方案13】:与语言选择相比,您的架构和算法对速度和可扩展性的影响更大。
Perl、PHP 或 Java 都可以完成这项工作。
我会在 Perl 中执行此操作,因为我很了解它并且更喜欢它而不是 PHP(我也很了解)。您的里程会有所不同。
【讨论】:
以上是关于我应该为这个项目使用 Perl 还是 PHP 或其他东西?的主要内容,如果未能解决你的问题,请参考以下文章
我应该使用 \d 还是 [0-9] 来匹配 Perl 正则表达式中的数字?