我在一个新的iOS Swift项目中使用Realm.我正在使用Xcode 6.0.1与iOS SDK 8.0和Realm 0.85.0
我正在尝试使用新的Realm主键功能,所以我可以做一个addOrUpdateObject.
这是一个示例模型:
import Foundation
import Realm
class Foo: RLMObject {
dynamic var id = 0
dynamic var title = ""
func primaryKey() -> Int {
return id
}
}
Run Code Online (Sandbox Code Playgroud)
我是如何尝试添加/更新新对象的:
let foo = Foo()
foo.title = titleField.text
foo.id = 1
// Get the default Realm
let realm = RLMRealm.defaultRealm()
// Add to the Realm inside a transaction
realm.beginWriteTransaction()
realm.addOrUpdateObject(foo)
realm.commitWriteTransaction()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
RLMExecption',原因:''Foo'没有主键,无法更新
以下是主键上的文档.我可能没有正确设置:http:
//realm.io/docs/cocoa/0.85.0/api/Classes/RLMObject.html#//api/name/primaryKey
最新文档现在在这里:https: //realm.io/docs/objc/latest/api/Classes/RLMObject.html#//api/name/primaryKey
我正在尝试调试我的应用程序尝试访问睡眠Heroku Dyno时出现的API问题.问题是dyno自然睡眠需要一段时间,所以它确实减慢了调试过程.
我知道如何关闭一个dyno但是我试图解决的错误似乎发生在应用程序向一个没有立即响应的睡眠动态的请求时,但最终会响应.
我有一个在Django项目中运行Heroku的Postgres 9.4.18数据库.我注意到查询变得越来越慢所以我在一个查询上运行了"EXPLAIN ANALYZE"并注意到对于一个节点,行估计大大高于实际行数:
-> Seq Scan on listings_listing u1 (cost=0.00..1536692.01 rows=5030003 width=8) (actual time=0.811..11263.410 rows=173537 loops=1)
Run Code Online (Sandbox Code Playgroud)
然后我在桌面上运行"VACUUM FULL ANALYZE",然后在查询中重新启用"EXPLAIN ANALYZE"并得到:
-> Seq Scan on listings_listing u1 (cost=0.00..23554.61 rows=173537 width=8) (actual time=0.001..33.884 rows=173537 loops=1)
Run Code Online (Sandbox Code Playgroud)
现在执行时间快了100倍.
所以这两个问题是:A)不应该自动吸尘是否会阻止这种情况?(如何检查是否已启用?)B)假设未执行抽真空,它是如何实现的?
---------------------------------更新
我从heroku发现了这个命令,它给出了autovacuum stats,这里是输出(不幸的是我在手动真空后运行它.
heroku pg:vacuum_stats DATABASE_URL
schema | table | last_vacuum | last_autovacuum | rowcount | dead_rowcount | autovacuum_threshold | expect_autovacuum
--------+-----------------------------------------+-------------+------------------+----------------+----------------+----------------------+-------------------
public | listings_listing | | 2018-06-27 15:36 | 173,537 | 0 | 34,757 |
Run Code Online (Sandbox Code Playgroud)
似乎所指示的阈值应该导致它在很久以前运行真空.
此外,这里是关于吸尘设置文档的Heroku页面:https: //devcenter.heroku.com/articles/managing-vacuum-on-heroku-postgres