jjzjj

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

coder 2024-06-28 原文

背景:

我开始构建/设计一个新网站,该网站将跟踪大量 项目的工作流程。每个项目都有分配给它们的阶段(规划、实现、实现后、结束等...)。每个阶段包含不同的任务等。

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

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

众所周知,商业世界中的项目和标准变化很快。因此,我希望使这个站点在每个阶段和任务方面尽可能动态和快速变化。例如,员工可能需要对每个向前推进的项目执行以前未定义的额外任务。然后,我们将需要能够快速更改所有当前打开的项目条目和所有新项目,以将新项目添加到 list 中。

问题:

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

初步想法:

SQL/数据库存储:

优点:

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

缺点:

  • 新的 list 项目将导致需要在每个表中创建新列。
  • 每项任务的复杂性可能会导致连接大量表。
  • 创建新列后,每个存储过程都需要修改以确保新列包含在其操作中。

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 Document DB 等文档数据库对数据模式的限制较少,并且通常比 SQL 数据库更好地横向扩展。

因此,您可以更轻松地更改项目对象架构并添加新属性。检索项目对象也将更加容易 - 您无需执行大量 SQL 连接即可“构建”项目。

关于性能:这取决于你将如何使用数据库。对于上面的示例,您将拥有:

  1. 创建项目——一次插入到文档数据库与 4 次插入(项目、所有者、2 个任务)到 SQL
  2. 为了获得项目——一次读取与一次相当复杂的选择与连接。您拥有的项目对象越复杂,选择语句就越多。
  3. 但是,如果您需要根据某些条件过滤应用项目或任务,SQL 无疑会更方便并且显然具有更好的性能。

关于sql-server - 工作流网站 - 后端设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41679538/

有关sql-server - 工作流网站 - 后端设计建议的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  7. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  8. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

  9. ruby - JetBrains RubyMine 3.2.4 调试器不工作 - 2

    使用Ruby1.9.2运行IDE提示说需要gemruby​​-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall

  10. ruby - `rescue $!` 是如何工作的? - 2

    我知道全局变量$!包含最新的异常对象,但我对下面的语法感到困惑。谁能帮助我理解以下语法?rescue$! 最佳答案 此构造可防止异常停止您的程序并使堆栈跟踪冒泡。它还会将该异常作为值返回,这很有用。a=get_me_datarescue$!在此行之后,a将保存请求的数据或异常。然后您可以分析该异常并采取相应措施。defget_me_dataraise'Nodataforyou'enda=get_me_datarescue$!puts"Executioncarrieson"pa#>>Executioncarrieson#>>#更现实的

随机推荐