我正在处理的站点需要从 150-300 人那里获取推文,将它们存储在本地,然后将它们列在首页上。这些个人资料成群结队。
页面将显示
我们预计会有相当多的流量。最后一个类似的站点每天的访问量达到峰值,接近 40K,并且在我开始将页面缓存为静态文件并禁用某些功能(一些,不小心..)之前遇到了麻烦。这主要是由于页面加载还会从最长没有更新的 3-6 个配置文件中获取最后 x 条推文。
有了这个新站点,幸运的是我可以使用 cron 来获取推文,这很有帮助。我还将稍微对数据库进行非规范化,以便它需要更少的连接,优化它以获得更快的选择而不是大小。
现在,主要问题:我如何找出哪些配置文件可以有效地检查新推文?有些人会比其他人更频繁地发推文,有些人会突然发推文(这种情况经常发生)。我希望网站的首页尽可能保持“最新”。如果涉及到 300 个配置文件,我每分钟检查 5 个,一些推文只会在一小时后出现。我可以更频繁地检查(最多 20K),但希望尽可能优化它,既不达到速率限制 又 不耗尽本地服务器上的资源(它命中 mysql 的连接限制与其他网站)。
问题 2: 由于 cron 每分钟只“运行”一次,我想我必须每分钟检查多个配置文件 - 如前所述,至少 5 个,可能更多。为了尝试在那一分钟内分散它,我可以让它在批处理之间或什至单个配置文件之间休眠几秒钟。但如果总共花费的时间超过 60 秒,脚本就会自行运行。这是个问题吗?如果是这样,我该如何避免?
问题 3:还有其他提示吗?自述文件?网址?
最佳答案
我不会使用 cron,只使用 twitter 的 streaming API with a filter为您的 150-300 名 Twitter 用户。
statuses/filter
Returns public statuses that match one or more filter predicates. At least one predicate parameter, follow, locations, or track must be specified. Multiple parameters may be specified which allows most clients to use a single connection to the Streaming API. Placing long parameters in the URL may cause the request to be rejected for excessive URL length. Use a POST request header parameter to avoid long URLs.
The default access level allows up to 200 track keywords, 400 follow userids and 10 1-degree location boxes. Increased access levels allow 80,000 follow userids ("shadow" role), 400,000 follow userids ("birddog" role), 10,000 track keywords ("restricted track" role), 200,000 track keywords ("partner track" role), and 200 10-degree location boxes ("locRestricted" role). Increased track access levels also pass a higher proportion of statuses before limiting the stream.
我相信在指定用户 ID 时,您实际上会从流式 api 获取所有推文:
All streams that are not selected by user id have statuses from low-quality users removed. Results that are selected by user id, currently only results from the follow predicate, allow statuses from low-quality users to pass.
这样您就可以获得实时结果,而不必担心速率限制。你只需要确保你能足够快地接受数据。但对于 300 个用户来说,这应该不是问题。
更新 - 如何使用 API:不幸的是,我从来没有机会使用流式 API。但是,我以前曾守护进程化 php 脚本(是的,我知道这不是 php 的优势,但如果您正在做的所有其他事情都是在 php 中进行的,那么它就可以完成)。
我会设置一个简单的 php 脚本来使用状态,然后将它们(原始 JSON)转储到消息队列中。然后我将另一个脚本指向消息队列以获取状态并将其放入数据库中。这样,数据库连接和处理时间不会干扰简单地接受流式数据。
从外观上看是不是phirehose将适合该解决方案的第一部分。类似于 beanstalkd (使用 pheanstalk )将用作消息队列。
关于php - 从数百个推特个人资料中高效地获取和存储推文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775778/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf
对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化
有没有办法将RubyVM::InstructionSequence存储到文件中并稍后读取?我尝试了Marshal.dump但没有成功。我收到以下错误:`dump':no_dump_dataisdefinedforclassRubyVM::InstructionSequence(TypeError) 最佳答案 是的,有办法。首先,您需要使InstructionSequence的load方法可访问,默认情况下该方法是禁用的:require'fiddle'classRubyVM::InstructionSequence#RetrieveR
下面是我用来从应用程序中解析CSV的代码,但我想解析位于AmazonS3存储桶中的文件。当推送到Heroku时它也需要工作。namespace:csvimportdodesc"ImportCSVDatatoInventory."task:wiwt=>:environmentdorequire'csv'csv_file_path=Rails.root.join('public','wiwt.csv.txt')CSV.foreach(csv_file_path)do|row|p=Wiwt.create!({:user_id=>row[0],:date_worn=>row[1],:inven
如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。