gpt4 book ai didi

java - 尝试用Java设计数据库。到目前为止,我有一个可序列化的对象,我可以在需要时读取并更新该对象。好主意还是坏主意?

转载 作者:行者123 更新时间:2023-12-02 05:42:17 25 4
gpt4 key购买 nike

因此,部分出于对 SQL 语法的失望,我决定尝试实现我自己的数据库。我不需要执行非常复杂的操作 - 只需要进行行查找和添加新行。我有两个数据结构,UserCircle。然后将它们放入 Java 的列表中,最终的数据库对象如下所示(请注意,它实现了可序列化):

public class Database implements Serializable {
private static final long serialVersionUID = 5790642843089065198L;

List<User> users;
List<Circle> circles;

public Database() {
users = new ArrayList<User>();
circles = new ArrayList<Circle>();
}

}

每当我更新对象时,我也会使用 ObjectOutputStream 将对象“保存”为文件。每当我从数据库中读取数据时,我都会使用 ObjectInputStream 从文件中“获取”对象。我还有一个DatabaseHelper 类,它扩展了Thread。这个类相当长,但简单地说,它将Database对象初始化为静态变量。我的问题不是关于我遇到的具体问题,事实上,我已经确认我的代码可以按照我的预期工作。当程序退出甚至失败时数据库会被永久保存。我还能够启动许多客户端,它们都与数据库有独立的连接,但也能够看到彼此的提交。

我遇到的问题与设计有关。每当我打开一个线程时,都会读取整个数据库(仅在提交时才会更新)。企业数据库如何工作,比如何时需要进行行查找?整个表是从文件读入内存吗?

对于 cs.stackexchange.com 来说,这可能是一个更好的问题,但我们将不胜感激。

最佳答案

数据库中的常见方法是使用内存映射文件。这使您可以方便地将所有数据几乎立即保存在内存中,而无需等待数据实际加载。

在 Java 中,这意味着将文件映射出堆并根据需要将数据放入堆上。一旦你从堆中写出数据,它就会被操作系统异步保存。

我有一个 SharedHashMap,它是为无 GC 序列化、跨进程/线程并发访问和惰性持久性而设计的。使用内存映射文件意味着您可以通过仅触摸/读取非常少量的页面来读取键/值,其余数据不需要位于内存中。

关于java - 尝试用Java设计数据库。到目前为止,我有一个可序列化的对象,我可以在需要时读取并更新该对象。好主意还是坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24412761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com