我有兴趣了解数据库引擎的工作原理(即它的内部).我知道CS中教授的大多数基本数据结构(树,哈希表,列表等)以及对编译器理论的非常好的理解(并且实现了一个非常简单的解释器)但我不明白怎么去关于编写数据库引擎.我已经搜索了关于这个主题的教程,我找不到任何教程,所以我希望别人可以指出我正确的方向.基本上,我想了解以下信息:
以及可能与此相关的任何其他主题.它不一定是磁盘上的数据库 - 即使内存数据库也没问题(如果它更容易),因为我只想学习它背后的原理.
非常感谢您的帮助.
我环顾四周,发现一些MySQL引擎是innodb和MyISAM.也许还有更多.我的问题是这些数据库引擎是什么?
不同的MySQL引擎有什么区别?更重要的是,我如何决定使用哪一个?
我有一个应用程序数据库,其中包含一个用户表(基于计数字段*typelength的每个用户1kbyte数据),以及属于用户的大约100个相同大小的内容(每件事物0.5千字节),并且它位于"用户"中"表和"事物"表.
这似乎会导致每个用户大约51千字节的数据.但是,我听说对于MySQL,我应该加倍覆盖索引表,这会让我达到102kbytes/user这是真的吗?是否有任何其他数据扩展因素需要考虑MySQL,或者是一个好的估计是102千字节?
除了索引因子(我认为是2)和存储效率(我也认为是2),MySQL中的数据存储还有其他任何乘数吗?
有人可以解释一下SQL Server Compact Edition和SQL Server Express Edition之间的主要区别是什么?
出于什么目的我应该使用这个或那个?
谢谢
可能重复:
MySql:MyISAM与Inno DB!
我正在使用MySql在php中实现一个博客.
并非所有引擎都支持特殊字段类型,如BLOB(二进制大对象)或TEXT类型,我需要大量使用它们.
此外,我将非常需要使用外键机制管理对帖子的评论以及不同可能的帖子档案.
在效率和功能方面最好使用哪种数据库存储引擎(MyISAM,InnoDB,..)?
单用户数据库和多用户数据库有什么区别?为什么我需要使用单个用户数据库?为什么这么做?
如果我有多个线程使用相同的登录凭据同时访问同一个数据库,我是否需要一个多用户数据库?
我正在学习 MySQL 架构。我想出了以下插图:
有4个我不太理解的概念:
我从很多文档中看到,Write-Ahead Log (WAL) 是一种数据库持久性机制。MySQL WAL 设计 维基百科 WAL
像上图一样,将数据从内存缓冲池刷新到磁盘时有两种类型的缓冲区:双写缓冲区和日志缓冲区。为什么我们需要 2 个缓冲区,它们与 WAL 有什么关系?
最后但并非最不重要的是,重做日志和 WAL 之间有什么区别。我认为 WAL 可以在发生错误时帮助数据库恢复(例如:停电、服务器崩溃......)。我们需要什么与 WAL 一起重做日志?
我有一个大问题......我有一个数据库java程序创建。
我想知道数据库是否存在,如果存在只是连接,如果不创建它。
我试过这个:
if (dbName.exists() == false) {}
Run Code Online (Sandbox Code Playgroud)
这就是全部代码...
Class.forName("com.mysql.jdbc.Driver");
System.out.println("MySQL JDBC driver loaded ok.");
Run Code Online (Sandbox Code Playgroud)
这是它的备份代码,只是为了现在工作......部分代码有效!
conn = DriverManager.getConnection(DBurl + url
+ "?createDatabaseIfNotExist=true& + "
+ "useUnicode=true&characterEncoding=utf-8&user="
+ userName + "&&password=" + password);
System.out.println("Connected to database ");
System.out.println("Connected to the database " + url);
Run Code Online (Sandbox Code Playgroud)
但我想要这样的东西:
FILE dbName = new FILE (url);
Statement stmt = new Statement;
if (dbName.exists() == true)
System.out.println("Database exists ! Connecting ... ");
else {
String sql = "CREATE DATABASE "+url;
stmt.executeUpdate (sql);
}
Run Code Online (Sandbox Code Playgroud)
我不想将带有密码和用户名的 url 放在同一个地方......因为它们是从外部提供的,但这已经实现并有效。 …