我使用Delphi XE2和DISQLite v3(基本上是SQLite3的一个端口)。我喜欢 SQLite3的一切,除了缺乏并发编写,尤其是我在这个项目中广泛依赖多线程 :(
我的分析器明确表示我需要对此做一些事情,所以我决定使用这种方法:
每当我需要在 DB 中插入一条记录时,我不是执行 INSERT,而是
write
在一个特殊的文件夹中进行 SQL 查询,即。WriteToFile_Inline(SPECIAL_FOLDER_PATH + '\' + GUID, FileName + '|' + IntToStr(ID) + '|' + Hash + '|' + FloatToStr(ModifDate) + '|' + ...);
我添加了一个
timer
(在主应用程序线程中)每分钟触发一次,解析这些文件,然后使用事务插入查询。最后删除那些临时文件。
结果是我获得了500% 的性能增益。另外,这种技术是ACID,因为我总是可以SPECIAL_FOLDER_PATH
在电源故障后扫描并执行我找到的 INSERT。
尽管结果很好,但我对使用的方法不是很满意(至少可以说是骇人听闻的),我一直在想,如果我可以拥有一个泛型——比如具有快速查找访问、线程安全、ACID 列表,这将是更清洁(可能更快?)
所以我的问题是:你知道 Delphi XE2 的类似内容吗?
PS。我相信许多阅读上面代码的人都会感到震惊,并且会开始侮辱我!请成为我的客人,但如果您知道更好(即更快)的 ACID 方法,请分享您的想法!