针对每个用户

时间:2016-03-29 02:38:33

标签: asp.net azure asp.net-identity azure-storage-blobs azure-cosmosdb

我正在开发我的第一个应用程序作为一个学习项目绝对做所有事情:

  • 客户端前端(角度)
  • 后端(OWIN自我主机,ASP.NET Web Api 2)
  • 数据库和托管(Azure部署)

到目前为止,它一直是一个学习过程,我在我的应用程序中使用令牌完成了登录/注册授权,但是使用Identity框架和Azure SQL DB存储我的用户凭据(存储在为我创建的dbo.AspNetUsers表下) )。

要与我的用户表一起使用,我希望在我的应用案例中有一个表来实际存储与我的用户相关联的元数据:

  
      
  • 信用卡信息

  •   
  • PDF文件(BLOB格式,但与每个帐户关联的多个文件)这些BLOB文件是在上传PDF时创建的   稍后在下载时转回PDF。

  •   

我在Azure门户网站上看到有一个Document NoSQL数据库以及BLOB存储。我想知道是否可以将信用卡信息添加到我现有的AspNetUsers表中,这样可以简化我只需要处理将PDF数据单独存储在单独的表中。

我也不确定表格的结构,因为一个用户可以有很多PDF文件。我的业余知识认为,可能有一个Key Value数据库可能更好的格式为:

  Key-UserName            Value- JSON object of BLOB's with Id's.

我觉得对于检索表示PDF的BLOB的PDF表格,如果我可以将ID与每个条目相关联并且想出一个JSON对象我可以添加尽可能多的字段,那么检索所有这些不是最好的。查询,但不确定。

显然这是不成熟的,我只是在寻找资源和经验而不是直接的答案。

2 个答案:

答案 0 :(得分:4)

  

我想知道是否可以添加信用卡信息给我   已经存在的AspNetUsers表只能简化我   必须处理将PDF数据存储在单独的表格中   本身。

我不确定您是否可以在此表中添加列,但实际上我不会将用户的信用卡信息存储在应用程序数据库中。如果可能的话,我会使用第三方支付处理器并将我的解决方案与其集成,而不是自己存储信用卡信息(有点偏离主题评论,我知道:))。

现在回答关于存储PDF的另一个问题,我建议使用Azure Blob存储而不是DocumentDB。我在此概述的一些原因:Create a cloud storage app with ASP.NET and Azure。我能想到的其他原因是:

  • 虽然您可以将文件作为附件存储在DocumentDB中,但附件大小有限(最后我检查它是2MB)。在blob存储的情况下,此限制为200GB。
  • 您无法直接从DocumentDB流式传输附件内容。您首先需要获取应用程序中的内容,然后使用blob存储流式传输内容,您可以直接传输内容。

就解决方案而言,您可以采取两种方法:

  1. 创建Attachments表格。实际上,它是一个带有复合主键的简单表 - User Id + Blob Url。每当用户在blob存储中上传文件时,您都会获得blob URL。然后,您可以将该文件与文件名,上传日期等其他信息一起存储在该表中。如果您想查询数据,这种方法可以很好地工作,例如按相反的时间顺序排序文件。
  2. 创建容器/用户。在这种情况下,用户上传的所有文件都在容器中。有关详细信息,请参阅上面的链接。在这种情况下,当您要显示用户上载的文件时,只需从分配给该用户的容器中列出blob。但请记住,如果用户上传的文件少于5000个,则此方法可以正常工作,因为对容器中的列表blob的一次调用最多只能返回5000条记录。另请注意,blob存储是一个简单的对象存储,并且没有查询功能。

答案 1 :(得分:3)

对于信用卡信息,Azure SQL中用户ID和CC号码之间的简单映射表就足够了,并且可以让您处理用户和信用卡之间的一对多关系(您没有指定,所以也许现在这不是问题......也许以后呢?)。

关于PDF ...从成本或性能的角度来看,DocumentDB不是您理想的解决方案。它不适合存储和检索PDF等二进制数据。在您的场景中,我强烈考虑使用Blob存储来保存PDF内容,并通过SQL Azure中的映射表将PDF映射到用户,该映射表将用户ID与blob URI相关联。如果需要存储和查询PDF的额外元数据,可以在SQL映射表中使用额外的列。在创建或删除blob时,将有一些负担同步映射到Blob,但它是云中相当常见的数据场景。

祝你好运!