嵌入Linux和MTD闪存中的sqlite3

问题描述 投票:0回答:1
嵌入式系统具有M68K架构(基于MCF547X),Colilo和Linux内核2.6.10 它使用MTD(内存类型设备)或闪光灯(Spansion Make)。 大约有32 MB的数据要管理(所有记录形式),可用的内存为40MB作为MTD分区(JFFS2文件系统)。 我想了解使用SQLITE3(Amalgamation版本)时,我可能会遇到的与性能有关的问题或任何其他与内存有关的问题。

By与内存相关的问题i是指内存分区的频繁进行分化操作(因为该数据库的32 MB几乎每秒都会被修改)。

任何有关此要求的经验/见解都会非常有帮助。请分享您在必须照顾的方面的经验。

linux sqlite embedded-linux
1个回答
1
投票

使用WAL模式:切换sqlite到写入记录(WAL),而不是默认回滚日记。 WAL通过将更改附加到单独的日志文件中而不是重复重写数据库文件来减少Flash写入。设置
    PRAGMA journal_mode=WAL;
  • .
    TUNE页面尺寸
    :将SQLite的页面大小(
  • PRAGMA page_size
  • )与您的NOR闪光擦除块大小(检查Spansion的数据表 - Lige 64 KB或128 KB)。这可以最大程度地减少写入放大。 Reduce Transactions:批量更新成更少,更大的交易,而不是每秒一次。例如,如果您的应用程序允许,则每5-10秒更改提交每5-10秒更改。手动使用BEGIN TRANSACTION
    COMMIT
  • diSableSync:设置
    PRAGMA synchronous=OFF
    NORMAL
    降低fsync呼叫,以速度交易一定的耐用性。要谨慎 - 如果损失权力,这会增加腐败的风险。
  • 每秒向MTD写作根本不是一个好主意。您将立即获得不良部门。尝试将SQLite文件保存在 /TMP中。这将大大提高读/写操作的速度并延长MTD寿命。
    
    
    跨度和记忆的每个擦除扇区的擦除周期(通常为128kb),因此,如果您的应用程序每秒在其中写入它,则您的终身时间将大大减少。 ubifs/yafs/jffs2可以提供帮助,但不能避免。
        
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.