从关系数据库获取 json 数据的更好方法?

Posted

技术标签:

【中文标题】从关系数据库获取 json 数据的更好方法?【英文标题】:Better way to get json data from relational databases? 【发布时间】:2019-02-21 21:19:36 【问题描述】:

我不知道我的标题是否可以理解,但实际上我想知道哪个更好?

1-创建对象类并通过循环从mssql db中获取数据

2-从sql db中获取json格式的数据

3-别的东西..

我认为,处理大数据时循环可能会很慢。但是,也许使用 json path 可能比循环慢。

1 的示例(在循环中创建对象

List<objExample > retVal = new List<objExample >();
objExample item;
SqlConnection con = new SqlConnection("CONNECTION STRING");
SqlDataAdapter da;
SqlCommandcmd;
da = new SqlDataAdapter("Select a,b from table", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
foreach (DataRow itemdr in dt.Rows)

item = new objExample();
item.A= itemdr["a"].ToString();
item.B= itemdr["b"].ToString();
item.HasError = false;
retVal.Add(item);

return retVal;

示例 2 (FOR JSON PATH)

List<objExample > retVal;
SqlConnection con = new SqlConnection("CONNECTION STRING");
SqlDataAdapter da;
SqlCommandcmd;
da = new SqlDataAdapter("Select a,b from table for json path", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
string _json = dt.Rows[0][0].ToString();
retVal = JsonConvert.DeserializeObject<List<objExample>>(_json);
return retVal;

我用小数据尝试了这两种方法,但都不满意。

PS:我在脑海中写了代码。对不起,错误的代码和糟糕的英语。

请指导我。谢谢。

【问题讨论】:

【参考方案1】:

为了清楚起见,您在阅读完整的表格吗?

如果目标是获取存储在 json 中的数据,并可能对其执行一些查询,NoSQL DB 似乎比 SQL 更合适。

【讨论】:

感谢您的回复,但不幸的是我们不得不使用 mssql。有时我会阅读所有表格。【参考方案2】:

计算依赖于行数的命令数。有点像我们如何做大 O 复杂性。 我会做类似的事情:

  using (var sqlCommand = new SqlCommand("Select a,b from table for json path", con))

   try
     
       using (var reader = sqlCommand.ExecuteReader())
        
           while (reader.Read())
           
             item = new objExample();
             item.A= reader["a"].ToString();
             item.B= reader["b"].ToString();
             item.HasError = false;
             retVal.Add(item);

            
           

      

请记住,当您执行此操作时,sql 连接将保持打开状态,因此如果您想在循环后或循环中执行此操作,它会调用它的判断。 da.Fill 或使用上述内容在内部是相同的,仍将遍历所有行。 就使用 json 而言,除非您询问存储为 Json 文件是否比在 sql 中更好的选择,否则我不会这样做。这是一个完全不同的问题。

一旦将数据放入列表中,您就可以使用 PLINQ 并行处理数据,即使对于上述反序列化,您也可以尝试 PLINQ。

【讨论】:

感谢您的回复和建议,但我有一个问题。您的代码中需要“for json path”吗? @EnderKaya 是的。这是一个sql关键字。

以上是关于从关系数据库获取 json 数据的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中按模型从数据库中获取数据时如何附加关系

使用 Core Data 一对多关系从 JSON 数组填充 sqlite 数据库

从 2 个表中获取记录数 - 一对多关系

从关系数据库映射

没有关系数据库的 ACID 属性如何帮助非关系数据库更好地执行?

如何处理 Redux 中的关系数据?