Database 文件与数据库
我将为每个用户实现一个访问控制列表,这样他们就可以分配对自己资源的访问权限,这样他们就可以对自己的母亲隐藏信息,但向朋友显示信息 现在,将ACL存储在数据库中似乎非常疯狂,因为每个用户都是一个组,可以有许多子组。所以我想把ACL存储在一个文本文件中 好主意?坏主意Database 文件与数据库,database,file,text,acl,Database,File,Text,Acl,我将为每个用户实现一个访问控制列表,这样他们就可以分配对自己资源的访问权限,这样他们就可以对自己的母亲隐藏信息,但向朋友显示信息 现在,将ACL存储在数据库中似乎非常疯狂,因为每个用户都是一个组,可以有许多子组。所以我想把ACL存储在一个文本文件中 好主意?坏主意 编辑:我应该注意,我指的是每个用户的一个单独的文本文件。我正在考虑创建一个ACL类,可以序列化并写入文本文件。我担心将ACL存储在数据库中会创建异常庞大的联接表,并给数据库服务器带来巨大的压力。我不确定将其存储在文本文件中会有多容易。
编辑:我应该注意,我指的是每个用户的一个单独的文本文件。我正在考虑创建一个ACL类,可以序列化并写入文本文件。我担心将ACL存储在数据库中会创建异常庞大的联接表,并给数据库服务器带来巨大的压力。我不确定将其存储在文本文件中会有多容易。数据之间的关系是相同的。诚然,SQL并不总是友好的分层数据,但也不是平面文本文件。您的文本文件是否受到并发访问的保护?否则,数据库将是一个更好的主意。XML是分层数据的理想选择。不过,可以在数据库中处理分层数据,这就解释了这是多么美妙(这些概念不仅适用于MySQL):
就我个人而言,我不会将那样的数据存储在文本文件中。操作变得困难得多。并发性会让你头疼。随着文件变大,复杂性和性能也会降低。同样,在文件写入过程中发生的损坏风险也会增加,比如系统崩溃导致的断电 数据库通常会保护您不受这些问题的影响,让您专注于逻辑 您可以使用自连接在数据库中实现分层存储,例如
ItemID Data ParentID
--------------------------
其中ParentID是指向另一行的ItemID的指针给定我将在数据库中存储ACL的选项:
- 访问和查询数据的语言更简单、更标准(SQL)
- 数据库将为您提供事务、快速查询索引、完整性约束和安全性
- 根据您在本地文件中存储数据的方式,您可能需要随应用程序一起移动数据文件。示例:将应用程序从服务器1移动到服务器2李>
- 对于不可变(或不经常更改)的数据,应使用某种形式的缓存。所以,如果您使用的是File或DB,那么您应该将这些数据缓存一段时间
- 我敢肯定,您可以找到关系数据库的良好ACL模式模板,作为参考,如以下文档:
您所描述的问题/需求正是SQL的优势所在。毫无疑问,SQL是这项工作的合适工具。在存储分层数据方面,嵌套树通常比邻接列表更好。这可能会引起兴趣: