有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如果我将文件IO用作数据库或viceversa,它会如何影响代码的运行复杂性?

如果我想在程序逻辑中使用持久性,如果我可以使用文件输入/输出或数据库,那么它会如何影响算法的运行复杂性,因为文件和数据库都需要在cpu和辅助存储之间进行大量IO传输。因此,它肯定会影响运行的复杂性。我的理解正确吗

如果是这样的话,哪一个更倾向于好的呢?文件IO还是数据库


共 (3) 个答案

  1. # 1 楼答案

    数据库还是普通文件I/O更好取决于您具体做了什么

    例如,普通文件在顺序读写方面表现非常好。例如,将记录附加到普通文件需要固定的时间,而且由于开销较低,比关系数据库要短

    如果需要对文件内容进行随机访问,普通文件IO仍然可以提供良好的性能,但数据库开始变得更有意义。数据库可以被索引,如果你的应用程序需要根据不同的属性搜索记录,那么数据库绝对是这个工作的工具

  2. # 2 楼答案

    使用文件或数据库(不完全位于内存中(RAM))肯定比单纯在内存中操作慢,但速度只有一个常数(假设一个操作比内存快100倍——不管我们做多少次,它总是快100倍,因此它只是一个常数系数100)

    渐近复杂性(大O、大ω、大θ等)当然会忽略常数因子
    O(n) = O(10000 n))。(如果需要的话,我相信其中一个答案here会给出一些直觉)

    所以它不会影响运行时的复杂性

    文件或数据库是否更快取决于多个因素,其中包括:

    • 非本地数据库的网络速度
    • 硬盘速度
    • 你想做什么样的手术

    对于简单的写入或一次性读取操作,理论上,文件应该更快(但希望只快一点),因为数据库通常也会保存到文件中,并且会增加一些复杂性。对于重复读取操作,数据库可能要快得多,因为结果可以缓存在内存中,而不需要从文件中读取。对于复杂的操作,数据库通常表现得更好。总而言之,数据库往往是首选,但这确实是需要进行基准测试以获得准确结果的东西

  3. # 3 楼答案

    你在这里没有提供足够的信息来正确回答你的问题

    但是,让我做一些观察,可能会有助于指导你们

    首先,文件I/O和数据库I/O不会影响算法的复杂性。然而 它会对实现的复杂性和由此产生的运行时间产生巨大影响。这 这是你想要最小化的

    如果不需要搜索持久化记录,请单击文件I/O 选择应该是最有效的。这假设了纯粹的顺序处理

    一旦搜索进入画面,所有关于哪个的赌注都被取消了 方法将是最有效的。如果调整得当,数据库的速度可能会非常快。 当您选择糟糕的文件结构时,文件I/O可能会导致大量开销 或搜索机制(例如,通过大文件进行顺序搜索将非常有用) 比索引选择速度慢)

    总的来说,您应该能够使用 自定义文件I/O与通用数据库的对比。一个是针对特定应用程序进行调整的,另一个是针对特定应用程序进行调整的 不是(没有竞争)。然而,建立一个可靠的、高度可靠的 基于优化的定制文件I/O系统很可能会远远超过 运行时和维护方面(写得越多,需要维护的就越多)。这 这就是为什么这个行业如此多地依赖通用数据库来管理他们的数据

    我个人的偏好是使用数据库,而不是因为它可能是 绝对最快的机制,但因为它将照顾事务的完整性 为您提供(即提供提交/回滚功能)。考虑困难 在 异常终止事件。当使用文件时,你永远不知道你的输出量有多少 崩溃发生时已缓冲(尚未持久化)。恢复/重启可以是 使用文件I/O时相当复杂。数据库使恢复变得更加容易-您只需 从最后一个提交点开始处理

    只有当数据库无法完成这项工作时,才求助于基于文件的处理——而且可能没有 数据库无法胜任的情况