Javascript 流式Web应用程序-Twitter、Facebook、NoSQL或SQL?

Javascript 流式Web应用程序-Twitter、Facebook、NoSQL或SQL?,javascript,web-services,streaming,nosql,Javascript,Web Services,Streaming,Nosql,因此,我们面临着一个设计挑战,我们完全可以开发一个系统,通过REST等API服务,在web上显示各种社交网络源(如Twitter和Facebook)的处理结果。处理部分已经完成,但是我们现在需要一个地方来存储结果 结果格式类似于消息ID、消息日期、处理的时间戳,然后是各种处理分数的集合。这个数据库中大约有2亿条消息。所以我们首先需要的是存储这些数据的东西。考虑到我们需要能够选择一系列打折列族样式数据库的日期(因为我认为HBase中的键范围扫描速度很慢),我们正在考虑尝试使用NoSQL文档数据库。

因此,我们面临着一个设计挑战,我们完全可以开发一个系统,通过REST等API服务,在web上显示各种社交网络源(如Twitter和Facebook)的处理结果。处理部分已经完成,但是我们现在需要一个地方来存储结果

结果格式类似于消息ID、消息日期、处理的时间戳,然后是各种处理分数的集合。这个数据库中大约有2亿条消息。所以我们首先需要的是存储这些数据的东西。考虑到我们需要能够选择一系列打折列族样式数据库的日期(因为我认为HBase中的键范围扫描速度很慢),我们正在考虑尝试使用NoSQL文档数据库。或者更好的选择可能是简单地将这些数据存储在旧的MySQL或VoltDB中。是否有人有这样一个系统实现的示例用例或故事

下一步是开发一个web应用程序。我们需要一个图表服务,它可以实时获取数据并更新界面。为此,我们正在考虑使用海图。还有更好的吗

最后,我们需要某种API服务,它可以像commet应用程序一样处理数据流,就像Twitter的流API一样。我想最好的选择是node.js

所以我想问题是,我们选择的技术是否最适合这项工作,是否有好的示例用例,是否有人会推荐


干杯

关于存储:nosql存储有4种类型。键/值、列数据库、文档数据库和图形数据库。每一个都比前一个慢,但也提供了更多的功能。如果您只需要存储数据,则可以选择键/值或列数据库。使用这种类型的存储,数据处理是手工完成的,您可能需要某种map reduce实现。也许是hadoop。文档和图形数据库为您提供某种查询,您可以在数据库中移动部分数据处理(例如,日期过滤器)。如果我必须选择一些nosql存储,我将使用图形数据库(例如neo4j)进行测试,如果我有性能问题,则切换到列数据库(例如cassandra)并映射reduce

关于图表:HighCharts似乎是个不错的选择。我不知道svg浏览器是否支持,也不知道是否存在一些性能问题,但我的机器看起来很不错


关于数据流。我对nodejs没有什么经验,这将是我的第一个选择。很少有其他实现,比如python的TornadWeb和erlang的Misultin、Mochiweb和Cowboy。我发现了一个与这些服务器的链接,看起来erlang服务器比NodeJ更快。您也可以查看它们。

您还可以将SOLR/Lucene与切分一起使用。通过主/从solr设置,可以提高吞吐量

看起来你已经做了功课,只需要额外的验证。我认为您已经选择了一种明智的技术作为起点。我唯一的评论仅与存储有关。我们的一个项目使用MongoDB进行大型分析事务,因为我们最初认为它更适合我们。然而,在性能测试过程中,我们发现,虽然从接口的角度来看它很好,但它并没有真正扩展到我们想要的地方,所以我们切换回良好的旧关系数据库。肯定不适用于所有的NoSQL实现,但需要考虑一些问题。感谢Momo提供的信息。我越来越多地认为,也许开一家Col Fam商店是一条可行的道路。我唯一不确定的是查询性能,我想我需要一种方法来生成顺序递增的键,并在HBase中转储记录。问题是,如果我想按日期进行查找,我需要开发一个索引表,上面写着“日期/时间的like have x columns,IDs x have results”。因此,问题是,在MySQL中,与在索引表上执行类似操作相比,say keys>X的扫描返回率是多少。有人吗?非常感谢你提供的信息!我想最大的问题是以历史方式获取数据(例如,用户希望查看最近几周结果的图表),但同时也有它,这样我们可以实时流式传输数据,以便在将新处理的记录添加到数据库时将其发送到web界面。对于HighCharts,这看起来需要使用轮询来完成,但这没关系。问题是什么是最快的投票方法。例如,在HBase中,请求时间戳键>日期或ID字段>最后一个ID,或者在MySQL中运行SQL查询,例如ID>xyz或时间戳>abc??如果每秒都有更新,则池是更好的选择。在另一种情况下,推送是更好的选择,因为您不会执行虚拟请求。我想highcharts可以适应于使用内存存储,并从NodeJ或其他服务器填充的数组中获取数据。另外,twitter将在(我希望)几周内掀起开源风暴。它似乎很有用,但我还没有测试它,因为它仍然关闭。无论如何,你可以查看这篇文章的一些预览:谢谢你的非常有趣的喜欢风暴。我们一直在关注S4,但Storm在发布时可能会更“为生产做好准备”。谢谢