我需要设计一个程序来循环遍历 1 亿个关键字,调用 Web 服务 ( http://example.com/service.aspx?keyword=xxxx ) 并将以 JSON 形式输出的结果保存到 redis 中。
我的想法是开始大量插入所有关键字(这是对 web 服务的输入)到 redis。
之后,我将使用 rolling-curl 编写一个 PHP 脚本它将从 Redis 读取并用两件事更新它:标志和结果。 flag 键将用于跟踪更新的记录,后者将用于存储 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 实现?
谢谢
最佳答案
+1 to Dagon - Redis 是一种“内存中”存储……因此,如果您的数据集应该代表一行,那么您将需要超过 35GB 的内存。
接下来是发送 1 亿个请求并收集结果所需的时间。即使您不等待服务器的响应并且可以询问下一个,这仍然需要很长时间。
最后 - 按字段查询在具有 1 亿个条目的 Redis 中无法正常工作。您可能会考虑 MongoDB - 如果您想要丰富的即时查询 - 或者 Couchbase 或 CouchDB - 如果 View (相当有限和预定义的查询)就足够了。
所以最后,如果归结为您的目标时间范围。如果你想让程序每周运行一次,从性能上来说应该足够好了。如果你可以为 redis 提供内存,它会工作,但是查询字段会很慢,因为坦率地说你不应该使用它们。当你有大数据集时,你应该只查询索引的字段。因为 Redis 不支持二级索引,所以你不能在那里做。
关于PHP curl 调用 Web 服务 1 亿次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24092333/