问题标签 [large-scale]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
artificial-intelligence - 大脑建模
只是想知道,因为我们已经达到了每台 PC 1 teraflop,但我们仍然无法模拟昆虫的大脑。有没有人见过一个自学习、自开发的神经网络的体面实现?
haskell - 在 Haskell 中处理大文件
我有一个大文件(4+ gigs),可以说是 4 字节浮点数。我想将其视为列表,从某种意义上说,我希望能够使用 map、filter、foldl 等。但是,我不想用输出生成一个新列表,而是想将输出写回文件,因此只需将文件的一小部分加载到内存中。你可以说我是什么类型的 MutableFileList
有没有人遇到过这种情况?我没有重新发明轮子,而是想知道是否有一种 Hackish 方法来处理这个问题?
haskell - Haskell 中的大规模设计?
什么是设计/构造大型功能程序的好方法,尤其是在 Haskell 中?
我已经阅读了很多教程(Write Yourself a Scheme 是我最喜欢的,Real World Haskell 紧随其后)——但大多数程序都相对较小,而且用途单一。此外,我不认为其中一些特别优雅(例如,WYAS 中的大量查找表)。
我现在想编写更大的程序,有更多的移动部分——从各种不同的来源获取数据,清理它,以各种方式处理它,在用户界面中显示它,持久化它,通过网络通信等等。怎么可能一种最好的代码结构是清晰、可维护和适应不断变化的需求?
对于大型面向对象的命令式程序,有相当多的文献解决了这些问题。MVC、设计模式等想法是实现诸如关注点分离和面向对象风格中的可重用性等广泛目标的不错的处方。此外,较新的命令式语言适用于“随成长而设计”的重构风格,在我的新手看来,Haskell 似乎不太适合这种风格。
是否有与 Haskell 相当的文献?函数式编程(单子,箭头,应用程序等)中可用的奇异控制结构的动物园如何最好地用于此目的?您可以推荐哪些最佳实践?
谢谢!
编辑(这是唐斯图尔特回答的后续行动):
@dons 提到:“Monads 以类型捕获关键架构设计。”
我想我的问题是:一个人应该如何用一种纯函数式语言来思考关键的架构设计?
考虑几个数据流和几个处理步骤的例子。我可以将数据流的模块化解析器编写为一组数据结构,并且可以将每个处理步骤实现为纯函数。一条数据所需的处理步骤将取决于其价值和其他数据。某些步骤之后应该有一些副作用,例如 GUI 更新或数据库查询。
以一种很好的方式将数据和解析步骤联系起来的“正确”方法是什么?可以编写一个大函数来为各种数据类型做正确的事情。或者可以使用 monad 来跟踪到目前为止已处理的内容,并让每个处理步骤从 monad 状态中获取下一步需要的任何内容。或者可以编写大部分独立的程序并发送消息(我不太喜欢这个选项)。
他链接的幻灯片有一个“我们需要的东西”项目符号:“将设计映射到类型/函数/类/单子的惯用语”。有哪些成语?:)
symfony - 有没有关于 Symfony-2.0 和大型项目的必备书籍?
我正在寻找 Symfony 框架的指南,特别是 2.0 版。我对更高级的指南感兴趣,特别是关于如何“挤压” symfony 的最大性能,对中型到大型项目的优化,即使是不起眼(但数量众多)的请求也很重要。
欢迎任何好的参考(尽管我更喜欢书籍)。
database-design - 用于读取/解析文件的可扩展系统架构/设计
背景:我正在设计一个软件应用程序,它可以读取数百万或更多文件并转换或仅解析这些文件。部分需求是构建一个可扩展的分布式系统,以便可以相应地扩展读取和解析。
基本上,文件名的最低限度详细列表是一个数据库,客户端需要访问该列表才能知道接下来需要解析/转换哪些文件。这些文件再次位于另一个服务器/位置。虽然大多数部分都是设计好的,但需要重新审视的一个关键部分是将文件名提供给不同客户的设计。
我现在有两个选择:
设计一个位于 DB 旁边的服务,并将所有请求引导到文件名并提供给客户端。所以在这种情况下,客户端与服务(预定义的协议/格式)交谈并获取列表。
设计客户端直接与数据库对话并在客户端内实现同步/通道化。
我对第一个选项的唯一关注是,这是一个可扩展的架构/设计吗?有没有人在可扩展架构中处理过这样一种情况,其中一种资源在扩展中变得至关重要(在我的情况下,它可能是一项服务为所有客户端提供/服务)
r - 使用 R 和 Cytoscape 进行大规模社交网络可视化的记忆问题
我对 R 比较陌生,正在尝试解决以下问题:
我在带有 32 位版本 R 的 Windows 7 Enterprise 平台上工作,并且我的机器上有大约 3GB 的 RAM。我有大规模的社交网络数据(大约 7,000 个顶点和大约 30,000 个边),这些数据当前存储在我的 SQL 数据库中。我设法将这些数据(省略顶点和边缘属性)拉入 R 数据框,然后拉入 igraph 对象。为了进一步分析和可视化,我现在想使用 RCytoscape 将此 igraph 推送到 Cytoscape 中。目前,我的方法是将 igraph 对象转换为 graphNEL 对象,因为 RCytoscape 似乎适用于这种对象类型。(igraph 绘图功能太慢,缺乏进一步的分析功能。)
不幸的是,我在运行这个脚本时总是遇到内存问题。不过,它以前曾与较小的网络合作过。
有谁知道如何解决这个问题?或者你能推荐任何其他与 R 配合得很好并且可以处理如此大规模数据的可视化和分析工具吗?
任何帮助将非常感激。提前非常感谢!
最好的,伊格纳西奥
algorithm - 求 N^2 个元素的中位数(大尺度)
问题是这样的:假设我们有 N 台机器,并且每台机器存储并可以操作它的 N 个元素,那么,我们如何以最低的成本找到所有 N^2 个元素的中位数?
真的很困扰,希望得到大家的解答,谢谢!
对不起,我写得太简单了。每台机器中存储的元素是随机的,没有顺序。而成本包含I/O成本,以及机器之间的通信、RAM、时间等一切都应该考虑在内。我只想找到获得中位数的最有效方法。
这些是我提出的一些解决方案:
- 使用外部排序,如合并排序或其他方法,并找到中位数。
- 使用桶排序,将所有元素按照其值分成X个连续的桶,这样我们就可以决定中位数在哪个桶中。扫描桶,我们将得到中位数。
- 我认为在“算法简介”中的 O(N) 算法中找到第 k 个数应该在这里工作吗?
但是,所有这些解决方案仍然需要一台额外的机器来完成这项工作。我想知道是否有一种方法可以只使用这 N 台机器来获得中位数?
谢谢!
mysql - 优化另一个表中可选字段的查询
我有一个名为items的 innodb 表,它为一个电子商务网站提供动力。搜索系统允许您搜索可选/附加字段,这样您就可以仅搜索维修过的计算机或仅超过 2000 年的汽车。
这是通过名为items_fields的附加表完成的。它有一个非常简单的设计:
还有一个名为fields的表,其中仅包含字段名称和类型。
返回搜索结果的主要查询如下:
在大规模(每天仅超过 400 万个搜索查询)上,我需要进一步优化这些高级搜索。目前,平均高级搜索查询大约需要 100 毫秒。
我怎样才能加快这个查询?您还有其他优化建议吗?两个表都是innodb,服务器堆栈绝对很棒,但是我仍然要解决这个查询:)
python - 大型 python 龙卷风项目的最佳结构是什么?
我正在使用以龙卷风为核心的 mongodb 数据库后端。我目前只有我的主文件,里面有一堆处理程序。这是一个多用户网络应用程序,用户之间有链接,也就是“朋友”系统。
大多数处理程序对应于动作文件。例如,好友请求处理程序对应于 user_actions.py 中的函数,该函数接受数据库和用户 ID 作为参数。我觉得这不是这样一个大型项目的最佳布局。我是否应该拥有某种包含当前用户模型的模型文件,或者这只是多余的。我目前将当前用户作为字典存储在 cookie 中。
javascript - 大型共享代码库,扩展功能
我们的应用程序是一个大型的 Javascript 应用程序,使用 Javascript MVC 框架。我们通过 SVN:external 在所有站点中使用 MVC 应用程序文件夹,每个站点也有自己的文件。设置文件特定于站点。
我们要求系统能够为每个站点提供不同的功能。核心功能应该保持不变。我们需要扩展核心代码,同时为当前和新开发人员提供可维护的解决方案。
目前我们想到的方案有:
a:在核心中嵌入功能条件并通过设置文件打开/关闭功能
b:覆盖/继承现有控制器
c:在核心内实现一个具有无限钩子的模块化系统(插件),并通过 settings.json 配置加载/启用哪些插件
选项 a 存在难以长期维护的问题,并且相当 hacky。
选项 b 已经实现,但很难维护(好像我们有一个新功能,如果每个站点的文件被覆盖,我们必须编辑它
选项 c 是我们最近考虑尝试和解耦修复的解决方案(通过使用共享(插件)控制器并编辑特定于站点的设置文件。
最好知道是否有人对我们已经想到的任何选项有任何经验,以及是否有人知道另一个更合适的选项。