1

假设 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,
    },
}

如果我想以任何我想要的方式操作和呈现数据,将其转储到本地数据库中是否明智?在某些时候,我还想检索每个问题的所有答案并将它们存储在本地数据库中。

我在想的工作流程是:

  1. 用户登录。
  2. Web 服务检索登录用户提出的所有问题,将它们转储到本地数据库中。
  3. 用户想要特定问题的所有答案,另一个 Web 服务进行检索并将它们转储到本地数据库中。
  4. 用户注销后,从本地数据库中删除该用户的所有问题和答案。
4

3 回答 3

1

我认为,如果您实施一种智能算法,您的想法可能会对性能有用。关键是确定您应该从服务中获取多少数据并保存到数据库中。在用户登录时获取这么多数据并将其保存到 db 是一个坏主意,但是您可以例如先将其中一半保存在 db 中,当应该使用另一半时,您可以将其保存并保存。

于 2010-03-08T22:49:37.810 回答
1

我不会这样做的。如果用户提出/回答了 5,000 个问题,则初始登录将永远持续。如果要缓存,请按请求缓存。它也将使编写 Web 服务驱动程序更容易。

用您自己的本地函数调用包装每个 Web 服务调用。在实际执行 Web 服务调用之前,请检查数据库以查看您是否已完成此调用。如果有,请检查超时以查看是否已过期。如果过期,或者没有设置做服务调用,并存储到数据库。

编辑

一些伪代码。函数名的组成:

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(...)");
}
于 2010-03-08T21:11:46.877 回答
0

我不明白为什么这是不明智的,只要数据库是隔离的,您就采取了预防措施,并且您正在做的事情不会打开其他数据库以进行 SQL 注入攻击...

特别是因为您只是将数据放入数据库中进行操作。

然而,这可能是矫枉过正。在我看来,您可以对内存中的数据集执行相同的操作并节省额外的数据库访问,但如果这对您有用,我认为它没有问题。

于 2010-03-08T21:11:09.853 回答