iPhone 上的最佳 SQLite 实践 [关闭]
Posted
技术标签:
【中文标题】iPhone 上的最佳 SQLite 实践 [关闭]【英文标题】:Best SQLite practices on the iPhone [closed] 【发布时间】:2010-10-26 20:47:21 【问题描述】:在 iPhone 上广泛使用 SQLite 时需要牢记哪些最佳实践?提示/技巧/便利因素都值得赞赏。
【问题讨论】:
【参考方案1】:我可以推荐使用FMDB 作为一个不错的 Cocoa SQLite 包装器。
【讨论】:
你确定它没有内存泄漏,使用安全等吗?它当然不完整并且显然不受支持。我说,使用 CoreData 并在(如果)变坏时调整性能 在查看我的应用程序是否存在泄漏时,我从未在库中发现任何漏洞。 这可能是一个更好的链接code.google.com/p/flycode/source/browse/#svn/trunk/fmdb【参考方案2】:测量您的应用的内存占用并查找 Instruments 中的泄漏。然后在调用 sqlite3_exec 后尝试:
pragma cache_size=1
和/或
pragma synchronous=0
YMMV。有关于性能提升、RAM 使用量大幅减少和泄漏减少的报告。但是,在不了解影响的情况下进行调整时要小心(例如,synchronous
会关闭刷新,这会大大加快速度,但如果手机在错误的时间重启,可能会导致数据库损坏)。
更多:http://www.sqlite.org/pragma.html
【讨论】:
+1 为此,cache_size 会占用 iPhone 上的大量内存,我花了一段时间才找到这个。【参考方案3】:在我的头顶:
使用事务。 确保您的 SQL 使用 correct order 中的表。 不要添加您不确定是否需要的索引。也许不仅针对 iPhone,而且针对嵌入式设备,都有一些很棒的技巧here。
link 属于旧版本的 SQLite,但仍然有用。
最后这个Stack Question 也有一些很好的信息。
我们目前将 SQLite 与 .Net Compact Framework 应用程序一起使用,它的性能非常好,我们已经花了一些时间进行优化,但还没有达到我们所能做的那么多。
祝你好运。
【讨论】:
【参考方案4】:我发现,在复杂查询中获取我正在寻找的 ID,然后按需获取其余信息,通常会更快。
例如:
SELECT person_id
FROM persons
WHERE (complex where clause)
然后在显示每个人时我会跑
SELECT first_name, last_name, birth_date, ...
FROM persons
WHERE person_id = @person_id
我通常发现这使得复杂查询的运行时间缩短了 1/2,并且对给定人员的查找通常在 2ms 左右(这是在具有 17k 行的表上)。
您的经验可能会有所不同,您应该自己安排时间。
另外,我必须感谢 Wil Shipley 在他的演讲中提出了这种技术: http://www.vimeo.com/4421498.
我实际上广泛使用了 sqlitebooks 中的水合/脱水模式,这是该技术的超集。
【讨论】:
【参考方案5】:我比较懒,喜欢尽可能的坚持核心代码,所以喜欢ORM工具SQLitePersistentObjects:
http://code.google.com/p/sqlitepersistentobjects/
你让你的领域模型对象继承自 SQLitePersistentObject(好吧有点侵入性),然后你可以根据需要持久化/检索你的对象。
坚持:
[person save];
重新加载它几乎同样简单。任何可持久对象都会添加动态类方法以允许您进行搜索。因此,我们可以像这样检索所有姓氏为“Smith”的 Person 对象:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
【讨论】:
【参考方案6】:我还没有尝试过的另一个选项是Core Data(需要是 Apple iphone 开发人员),虽然它是 3.0 功能,所以这取决于你的应用程序是否是一个选项..
【讨论】:
当前所有应用提交都需要使用 3.0 SDK 构建,所以我认为 Core Data 可能是最好的选择。 据我了解,提交不需要使用 3.0 构建,只需对其进行测试:“所有提交到 App Store 的内容都将在 iPhone OS 3.0 的最新测试版上进行审核.如果您的应用提交与iPhone OS 3.0不兼容,将不会被批准。”【参考方案7】:PLDatabase 是 FMDB 的替代品:http://code.google.com/p/pldatabase/
我在我的一个项目中使用它没有问题。
【讨论】:
以上是关于iPhone 上的最佳 SQLite 实践 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
有没有文件可以告诉我关于 iphone 的最佳信息? [关闭]
iPhone应用程序编程中网络呼叫请求/响应的最佳实践[关闭]
为 iphone 4s 和 5/5c/5s 屏幕尺寸开发的最佳实践 [关闭]