【问题标题】:PHP curl to call a web service 100 million timesPHP curl 调用 Web 服务 1 亿次
【发布时间】:2014-07-28 08:15:06
【问题描述】:

我需要设计一个程序来循环遍历 1 亿个关键字,调用 Web 服务 (http://example.com/service.aspx?keyword=xxxx) 并将结果作为 JSON 输出保存到 redis 中。

我的想法是首先将所有关键字(这是Web服务的输入)大量插入redis。

之后,我将使用rolling-curl 编写一个PHP 脚本,该脚本将从Redis 读取并用两件事更新它:标志和结果。 flag key 将用于跟踪更新的记录,后者将用于存储 JSON 字符串,如下所示:

{
  "keyword": "keyword_1",
  "flag": 1,
  "output": "result": [
    {
      "ID": "21",
      "field1": "some text",
      "field2": "another text"          
    },
    {
      "ID": "150",
      "field1": "some text",
      "field2": "another text"          
    },
    {
      "ID": "255",
      "field1": "some text",
      "field2": "another text"          
    }    
  ]
}

问题:

1) 就完成这项任务的预期时间而言,这是最好和最有效的方法吗?

2) 使用这种数据结构,我可以搜索我的redis并使用field1或field2找到关键字吗?如果没有,如何使用redis来实现?

谢谢

【问题讨论】:

  • 一亿!祝你好运

标签: php performance curl redis nosql


【解决方案1】:

+1 对 Dagon - Redis 是一个“内存中”存储……因此,如果您的数据集应该代表一行,那么您将需要超过 35GB 的内存。

接下来是发送 1 亿个请求并收集结果所需的时间。即使您不等待服务器的响应并且可以询问下一个响应,这仍然需要很长时间。

最后 - 在具有 1 亿个条目的 redis 中,按字段查询是行不通的。如果您想要丰富的即时查询,您可以考虑使用 MongoDB - 或者 Couchbase 或 CouchDB - 如果视图(相当有限和预定义的查询)就足够了。


所以最终如果归结为您的目标时间范围。如果你想让程序每周运行一次,从性能上来说应该足够好了。如果您可以为 redis 提供内存,它会起作用,但是字段查询会非常慢,因为您坦率地说不应该使用它们。当你有大数据集时,你应该只查询被索引的字段。因为 redis 不支持二级索引,所以你不能在那里做。

【讨论】:

  • 远程 Web 服务不太可能不会对您的 1 亿个请求产生问题
【解决方案2】:

同意@zahorak & Dagon 的观点,100 万个数据太多了,无法保存在内存中和查询。此外,对于嵌套数据结构的查询,MongoDB 是非常受欢迎的数据库之一,因为它提供了 n 级嵌套 (http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-nested-sets/)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2011-04-22
    • 2018-11-13
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多