文件 vs 数据库

3
我将为每个用户实现一个访问控制列表,这样他们就可以分配对自己资源的访问权限,从而可以隐藏某些东西,例如,对于他们的母亲隐藏,但向朋友展示。
现在,在数据库中存储ACL似乎会变得非常复杂,因为每个用户也是一个组,可以有许多子组。因此,我考虑将ACL内容存储在文本文件中。
好主意?坏主意?
编辑:我应该注意到,我正在谈论每个用户的单独文本文件。我正在考虑创建一个ACL类,我可以对其进行序列化并写入文本文件。我的担忧是,在数据库中存储ACL会创建非常庞大的联接表,并对数据库服务器造成重大压力。
6个回答

3
如果有选择,我会把ACL存储在数据库中:
  • 访问和查询数据的语言更加易用和标准化(SQL)。
  • 数据库将提供事务、快速查询的索引、完整性约束和安全性。
  • 根据您如何在本地文件中存储数据,您可能需要随应用程序一起移动数据文件。例如:从server1移动到server2。
  • 对于不可变(或不经常更改)的数据,应该使用某种缓存形式。因此,无论您是使用文件还是数据库,都应该对一些数据进行缓存一段时间。
  • 我非常确定,您可以找到适用于关系数据库的良好ACL模板,可以作为参考,比如这个文档:http://edhs1.gsfc.nasa.gov/waisdata/v2r20/ps/cd31110001.ps
希望对你有所帮助。

0

我不确定将其存储在文本文件中是否更容易。数据的关系是相同的。诚然,SQL并不总是友好的分层数据,但平面文本文件也不是。


0

你的文本文件是否受到并发访问的保护?否则,使用数据库会是一个更好的选择。


0

XML非常适合用于分层数据。虽然在数据库中处理分层数据也是可能的,但这里讲述的方法非常优美(这些概念不仅适用于MySQL):

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

个人而言,我不会将数据存储在文本文件中。这样操作起来会变得更加困难。


0
我的担忧是将ACL存储在数据库中会创建非常巨大的连接表,并对数据库服务器造成重大压力。
每个用户一个文本文件,而你的组/子组可能在其他文件中,你将不得不自己编写连接操作,对吗?
你所描述的问题/需求正是SQL擅长的。毫无疑问,SQL是这项任务的正确工具。

0

并发会让你吃亏。随着文件变得越来越大,复杂性和性能下降也会让你吃亏。如果在写入文件时出现电源故障或系统崩溃等情况,增加的损坏风险也会让你吃亏。

使用数据库通常可以避免这些问题,并让你集中精力处理逻辑。

您可以使用自连接(self joins)在数据库中实现分层存储。

ItemID    Data   ParentID
--------------------------

其中ParentID是指向另一行的ItemID的指针


嵌套树通常比邻接列表更适合存储分层数据。这可能会引起您的兴趣:http://dev.mysql.com/tech-resources/articles/hierarchical-data.html - Stuart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接