我目前正在创建一个程序,从facebook导入用户想要的所有组和提要。我曾经在oauth中使用graph api,这非常有效。但是我意识到一个请求不能处理1000个组加上feed的导入。因此,我正在寻找一种解决方案,将这些数据在后台(如cron作业)导入数据库。要求在后台运行在linux下运行宁静的问题你有什么经验?hadoop是正确的解决方案吗?
7lrncoxx1#
------更新
mfpqipee2#
有趣的是,您已经自己设计了合适的解决方案。因此,事实上,您需要以下组件:关系数据库,因为您希望以结构化、快速的方式请求数据->根据我的经验,我希望有一个完全规范化的数据模型(在您使用表users,groups,users2groups的情况下),也有4字节的代理键,而不是来自facebook的更大的键(对于反向引用,您可以将它们的键存储为属性,但是内部关系在代理键上更有效)->基于散列而不是字符串建立索引(例如crc32(lower(string)))—一个示例select不是这样的:从name=searchstring和hash=crc32(lower(searchstring))的用户中选择somethinguseful->永远不要基于长度大于8字节的字符串建立唯一的列;唯一的批量插入可以通过insert…select基于哈希+字符串检查完成->一旦你解决了这个问题,你还可以查看稀疏矩阵(见维基百科)和位图来优化你的用户2组(不过,我知道这是一个额外的,不应该妨碍你尽快拿出第一个版本)定期运行的cron作业->理想的情况是,facebook会给你(因此如果他们规定你的请求频率不超过每秒一次,那么就坚持这一点——不超过一次,但也要尽量接近上限)->投入一些时间来解决这个问题,如果需要激发不同类型的请求(请求用户记录<>请求组记录,但可能受到相同的限制)->大多数优化只能通过开发来完成——所以如果我是你的话,我会坚持使用任何高级编程语言,这些语言不需要太多的var类型杂耍,同时还广泛支持php等关联数组,我会自己编程->我在将cron作业设置为带有非激活输出缓冲的web页面(对于php,请查看ob\u end\u flush(void))—易于测试,cron作业可以通过curl触发;如果您通过自己的函数(例如带有时间戳)传递状态输出,那么也可以灵活地运行viw浏览器或通过命令行->这意味着高效的测试+高效的生产运行你的用户界面,它只请求你的数据库,从来没有,从来没有,从来没有外部系统api大量内存,以保持高性能(最佳:所有数据+索引数据都放入专用于数据库的数据库内存/缓存)->如果您使用mysql作为数据库,您应该查看innodb\u flush\u log\u at\u trx\u commit=0和innodb\u buffer\u pool\u size(如果感兴趣,只需google)hadoop是一个文件系统层,它可以帮助您提高可用性。然而,我会把它归入“稀疏矩阵”的范畴,这并不能阻止你想出一个解决方案。根据我的经验,可用性不是数据公开项目的主要限制。
falq053o3#
你可以用neo4j。neo4j是一个图形数据库,用于管理和查询高度连接的数据,既可靠又快速http://www.neo4j.org/1) 决定节点的结构、关系和属性,相应地,您需要创建从facebook获取数据并将其存储在neo4j中的api。我在3个大项目中使用了neo4j,它最适合于图形数据。2) 创建一个cron-jon,从facebook获取数据并存储到neo4j中。我认为为图形数据库实现mysql不是一个好主意。对于大数据,neo4j是一个不错的选择。
a11xaf1n4#
我喜欢另一个答案中的neo4j。所以我想知道我能为将来的项目学到什么。我对mysql的经验是,ram通常是最大的限制。因此,增加ram以加载完整的数据库可以使性能提高2-1000倍,这取决于您来自何处。其他的一切,比如索引的改进和结构,都会以某种方式发生。因此,如果我需要建立一个性能优先级列表,它应该是这样的:mysql+足够的ram专用于数据库来加载所有数据neo4j+足够的ram专用于数据库来加载所有数据我还是更喜欢mysql。它高效地存储记录,但需要运行连接来派生关系(neo4j不需要这种扩展)。连接成本通常很低,只要有正确的索引和http://docs.neo4j.org/chunked/milestone/configuration-caches.html neo4j确实需要在属性分离中添加额外的管理数据。对于大数据项目,这些管理数据的总和和满负荷的内存设置需要您购买更多的内存。性能方面,这两种选择都是终极选择。再往前走,你会发现:neo4j+没有足够的ram专用于数据库来加载所有数据mysql+没有足够的ram专用于数据库来加载所有数据在最坏的情况下,mysql甚至会将索引放在磁盘上(至少部分放在磁盘上),这会导致大量的读取延迟。与neo4j相比,您可以执行“从一个节点直接跳到另一个节点”的练习,至少在理论上应该更快。
4条答案
按热度按时间7lrncoxx1#
------更新
mfpqipee2#
有趣的是,您已经自己设计了合适的解决方案。因此,事实上,您需要以下组件:
关系数据库,因为您希望以结构化、快速的方式请求数据
->根据我的经验,我希望有一个完全规范化的数据模型(在您使用表users,groups,users2groups的情况下),也有4字节的代理键,而不是来自facebook的更大的键(对于反向引用,您可以将它们的键存储为属性,但是内部关系在代理键上更有效)
->基于散列而不是字符串建立索引(例如crc32(lower(string)))—一个示例select不是这样的:从name=searchstring和hash=crc32(lower(searchstring))的用户中选择somethinguseful
->永远不要基于长度大于8字节的字符串建立唯一的列;唯一的批量插入可以通过insert…select基于哈希+字符串检查完成
->一旦你解决了这个问题,你还可以查看稀疏矩阵(见维基百科)和位图来优化你的用户2组(不过,我知道这是一个额外的,不应该妨碍你尽快拿出第一个版本)
定期运行的cron作业
->理想的情况是,facebook会给你(因此如果他们规定你的请求频率不超过每秒一次,那么就坚持这一点——不超过一次,但也要尽量接近上限)->投入一些时间来解决这个问题,如果需要激发不同类型的请求(请求用户记录<>请求组记录,但可能受到相同的限制)
->大多数优化只能通过开发来完成——所以如果我是你的话,我会坚持使用任何高级编程语言,这些语言不需要太多的var类型杂耍,同时还广泛支持php等关联数组,我会自己编程
->我在将cron作业设置为带有非激活输出缓冲的web页面(对于php,请查看ob\u end\u flush(void))—易于测试,cron作业可以通过curl触发;如果您通过自己的函数(例如带有时间戳)传递状态输出,那么也可以灵活地运行viw浏览器或通过命令行->这意味着高效的测试+高效的生产运行
你的用户界面,它只请求你的数据库,从来没有,从来没有,从来没有外部系统api
大量内存,以保持高性能(最佳:所有数据+索引数据都放入专用于数据库的数据库内存/缓存)
->如果您使用mysql作为数据库,您应该查看innodb\u flush\u log\u at\u trx\u commit=0和innodb\u buffer\u pool\u size(如果感兴趣,只需google)
hadoop是一个文件系统层,它可以帮助您提高可用性。然而,我会把它归入“稀疏矩阵”的范畴,这并不能阻止你想出一个解决方案。根据我的经验,可用性不是数据公开项目的主要限制。
falq053o3#
你可以用neo4j。neo4j是一个图形数据库,用于管理和查询高度连接的数据,既可靠又快速
http://www.neo4j.org/
1) 决定节点的结构、关系和属性,相应地,您需要创建从facebook获取数据并将其存储在neo4j中的api。
我在3个大项目中使用了neo4j,它最适合于图形数据。
2) 创建一个cron-jon,从facebook获取数据并存储到neo4j中。
我认为为图形数据库实现mysql不是一个好主意。对于大数据,neo4j是一个不错的选择。
a11xaf1n4#
我喜欢另一个答案中的neo4j。所以我想知道我能为将来的项目学到什么。我对mysql的经验是,ram通常是最大的限制。因此,增加ram以加载完整的数据库可以使性能提高2-1000倍,这取决于您来自何处。其他的一切,比如索引的改进和结构,都会以某种方式发生。因此,如果我需要建立一个性能优先级列表,它应该是这样的:
mysql+足够的ram专用于数据库来加载所有数据
neo4j+足够的ram专用于数据库来加载所有数据
我还是更喜欢mysql。它高效地存储记录,但需要运行连接来派生关系(neo4j不需要这种扩展)。连接成本通常很低,只要有正确的索引和http://docs.neo4j.org/chunked/milestone/configuration-caches.html neo4j确实需要在属性分离中添加额外的管理数据。对于大数据项目,这些管理数据的总和和满负荷的内存设置需要您购买更多的内存。性能方面,这两种选择都是终极选择。再往前走,你会发现:
neo4j+没有足够的ram专用于数据库来加载所有数据
mysql+没有足够的ram专用于数据库来加载所有数据
在最坏的情况下,mysql甚至会将索引放在磁盘上(至少部分放在磁盘上),这会导致大量的读取延迟。与neo4j相比,您可以执行“从一个节点直接跳到另一个节点”的练习,至少在理论上应该更快。