sql-server – 工作流网站 – 后端设计建议

背景:

我开始构建/设计一个新网站,跟踪大量项目的工作流程.每个项目都将分配给他们(计划,实施,实施后,关闭等……).每个阶段包含不同的任务等.

有些人可能会问,“这听起来与已经存在的其他工作流程管理软件(WMS)非常相似,为什么不使用它呢?”

除了像其他WMS工具一样跟踪每个阶段的站点之外,它还需要直接从页面与其他系统(不同域)和软件(API / WMI)直接交互.它将允许我们的管理员维护Active Directory GPO,确保使用正确的设置正确初始化新计算机,监视远程计算机上的SQL数据库保真度等等.对于那些认为这个问题很重要的人……我目前正计划使用.NET构建网站.

众所周知,项目和标准在商业世界中迅速发生变化.因此,我希望在每个阶段和任务方面尽可能使这个网站充满活力和快速变化.例如,员工可能需要对之前未定义的每个项目执行额外任务.然后,我们需要能够对所有当前打开的项目条目和所有新项目进行快速更改,以便将新项目添加到清单中.

题:

根据每个人的经验,您发现什么是存储需要经常更新数据的大量数据的最佳方式?

初步想法:

SQL /数据库存储:

优点:

>轻松存储大量数据.
>能够通过主键和外键链接项目/阶段/任务
>后端上的存储过程有助于操作数据库并允许更改查询而无需重新编译站点. (大加!)

缺点:

>新的核对表项将导致需要在每个表中创建新列.
>每个任务的复杂性可能导致加入大量表.
>创建新列后,需要修改每个存储过程以确保新列包含在其操作中.

XML / YAML /任何标记语言

优点:

>从“前进”变化的角度轻松操纵.
>可以在每个可以更新网页的任务阶段轻松创建新的“节点”.

缺点:

>将数据保存到文件具有很高的波动性(文件可以删除,无数据恢复).
>尝试同时访问文件的用户的潜在问题会抛出错误(需要在代码中构建“锁定”以读取/操作文件数据).

最终评论:

我倾向于SQL /数据库存储,但是没有看到设计/框架的变化是一个快速的壮举.如果我遗漏的任何数据存储方法可能更适合解决方案,请告诉我.

感谢大家.

最佳答案 需要更多详细信息来推荐您一些特定的存储空间.但是根据您的描述,项目看起来像一个包含许多属性和子项的文档,如下所示:

{
 "id": 43233,
 "name": "MyProject",
 "created": "02/01/2017",
 "owner": {
 "id": 32132,
 "name": "John Smith"
}
"tasks": [
{
  "id": 43243,
  "name": "Task1",
  "priority": "high",
  "status": "new"
 },
 {
  "id": 43253,
  "name": "Task2",
   "priority": "low",
   "status": "done"
 }
]}

如果您的应用程序不需要跨项目提出大量请求并且主要与一个项目一起工作,那么文档数据库可能更适合您.像MongoDB,CouchDB,Azure文档数据库等文档数据库对数据模式的限制较少,并且通常比SQL数据库扩展得更好.

因此,您可以更轻松地更改项目对象架构添加新属性.检索项目对象也会容易得多 – 为了“构建”项目,您不需要执行大量SQL连接.

关于性能:它取决于您将如何使用DB.对于上面的示例,您将拥有:

>创建项目 – 将一个插入文档db vs 4插入(项目,所有者,2个任务)到SQL中
>获取项目 – 一个读取与一个相当复杂的选择连接.您拥有的项目对象越复杂,选择语句就越多.
>但是如果你需要通过一些标准来获得应用程序项目或任务,那么SQL会更方便,并且显然具有更好的性能.

点赞