database - 如何存储信息?数据库、数据结构、日志文件

标签 database data-structures logfile

最近在一个问题中遇到一个场景:

n网站 n每页和 n访问网站的用户....用户的每次访问以及他/她访问过的页面(未提及是否在数据库或日志文件中,因此由开发人员决定)

我决定继续它并在数据结构中做一些事情,但是当我与我的一个 friend 讨论这件事时,他说,我们可以将它保存在数据库中,这在逻辑上听起来也是正确的。

所以我们一般有 3 种存储任何东西的方法... log files data-structure database

现在我真的很困惑,什么时候应该使用数据结构、数据库或简单的日志文件,不仅针对这种特定场景,而且以通用方式?

真正的区别是什么?


我知道这个问题主要是基于意见,但在浏览时无法得到具体结果!

最佳答案

日志文件通常/通常仅用于输出 - 这些文件很少(如果有的话)被读取,可能只能手动读取。某些类型的文件可能具有随机访问,允许您通过单个索引(通过二分搜索)相当有效地查找给定记录,但您不能(轻松)在单个文件中的数据上拥有多个索引,这是一个对于数据库来说这是一项微不足道的任务。如果您只想记录一些内容以供稍后手动处理,那么日志文件就可以很好地工作(即使数据库也可以工作)。

数据库是行业标准,因为它们为您提供持久性、高效读写、标准接口(interface)和冗余(但当然需要正确设置)。

纯粹的数据结构解决方案通常不考虑持久存储,例如确保当程序因某种原因停止运行时保留数据。如果您确实想要写入和读取持久存储,那么高效、定期地执行此操作通常会相当复杂。处理多个/复杂的索引有点麻烦。这并不是说数据结构不能与持久存储一起使用 - 数据库是使用数据结构构建的,并且某些数据结构是专门为磁盘读写而设计的。但您不想在低级别上解决这个问题 - 如果您需要持久性,最好让数据库来处理它。

您还可以将数据结构和数据库结合起来,使用数据库作为持久存储并使用数据结构来缓存结果,这样您只需要对数据库进行(较慢的)写入,并且可以从数据库中进行(更快的)读取数据结构。这在具有外部数据库的大型系统中并不罕见。尽管任何比标准 map 数据结构更复杂的东西都可能使您的缓存过于复杂,并表明您的设计存在更大的问题。


你所遇到的听起来像是一个面试问题,他们可能期待一个数据结构解决方案,而简单地说“使用数据库”可能会让人皱眉。但是,如果这是一个系统设计问题,您几乎肯定需要在设计中包含某种数据库,而不是关心数据结构。

关于database - 如何存储信息?数据库、数据结构、日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22447867/

相关文章:

java - 哪个写入文件速度更快?

travis-ci - 从 travis CI 获取作业 ID 的日志文件

mysql: 开启通用日志

python - 连接具有相同 id Pandas DataFrame 的列

c# - ASP.NET 路由 - 带数据库查找的路由约束

php - 我将如何去显示我的数据库中的用户个人资料图片?

php - cURL 请求花费的时间太长,代码有问题吗?

java - 二维递归总是返回 0

powershell - 如何编写对象的单个属性的值?

c# - 将oracle数据库同步到一种本地数据库