假设Stackoverflow提供Web服务,您可以在其中检索特定用户提出的所有问题。从用户A获取所有问题的请求可能导致以下json输出:
{
{
"question": "What is rest?",
"date_created": "20/02/2010",
"votes": 1,
},
{
"question": "Which database to use for ...",
"date_created": "20/07/2009",
"votes": 5,
},
}
如果我想以任何我想要的方式操作和呈现数据,将它转储到本地数据库中是否明智?在某些时候,我还想检索每个问题的所有答案,并将它们存储在本地数据库中。
我在想的工作流程是:
答案 0 :(得分:1)
我不会这样做。如果用户询问/回答了5,000个问题,则会使初始登录永久进行。如果要缓存,请按每个请求缓存。它还可以更轻松地编写Web服务驱动程序。
使用您自己的本地函数调用包装每个Web服务调用。在实际进行Web服务调用之前,请检查数据库以查看您是否已完成此调用。如果有,请检查超时以查看它是否已过期。如果已过期,或未设置执行服务调用,则存储到db。
修改
一些伪代码。功能名称组成:
string get_question(questionId)
{
SQL = " SELECT data FROM cache
WHERE service='StackOverflow'
AND proceedure='get_question'
AND username='?'
AND parameters = '?'
AND updated > DATEADD(h, ?, GETDATE())";
// check to see if it exists in db and is not expired
question = db(SQL, currentUser(), questionId, 2); // single parameter is question id, 2 hour timeout
// if question is not null, then return the question from the cache.
if (question != NULL && question != "")
{
return question;
}
//otherwise do the webservice call to get the data.
question = WebServiceCall('get_question',questionId);
// store to database, delete if exists first.
db("DELETE from cache where service='StackOverflow' AND proceedure='get_question' AND username='?' AND parameters = '?'", currentUser(), questionId, 2
db("INSERT INTO cache (service,procedure,parameters,username,data) VALUES(...)");
}
答案 1 :(得分:1)
如果您实施智能算法,我认为您的想法对性能有用。关键是要确定应从服务中获取多少数据并保存到数据库中。在用户登录时获取如此多的数据并将其保存到数据库是一个坏主意,但是你可以,例如,首先将其中一半保存在数据库中,当应该使用另一半时,你可以采取并保存它。
答案 2 :(得分:0)
我不明白为什么这是不明智的,只要数据库被隔离,你就采取了预防措施,而你所做的事情并没有打开其他数据库直到SQL注入攻击......
特别是因为您只是将数据放入数据库中进行操作。
然而,这可能是矫枉过正的。在我看来,你可以使用内存中的数据集做同样的事情,并节省额外的数据库访问,但如果这对你有用,我看不出有问题。