我的数据库有500,000条记录。表格没有主键,因为Realm不支持复合主键。我在后台线程中获取数据,然后我想在主线程的UI中显示它。但由于Realm对象无法跨线程共享,因此无法使用我在后台获取的记录。相反,我需要重新获取主线程上的记录?如果我从500,000条记录中取出一条记录,它将阻止主线程。我不知道如何处理它。我使用Realm因为它说它足够快。如果我需要多次重新获取记录,它真的比SQLite快吗?我不想创建另一个将其他列组合为主键的属性,因为Realm数据库已经大于SQLite文件。
CrmConnection
然后我将获取的记录存储在Array
中@objc class CKPhraseModel: CKBaseHMMModel{
dynamic var pinyin :String!
dynamic var phrase :String = ""
class func fetchObjects(apinyin :String) -> Results<CKPhraseModel> {
let realm = Realm.createDefaultRealm()
let fetchString = generateQueryString(apinyin)
let phrases = realm.objects(self).filter(fetchString).sorted("frequency", ascending: false)
return phrases
}
func save(needTransition :Bool = true) {
if let realm = realm {
try! realm.write(needTransition) {[unowned self] in
self.frequency += 1
}
}
else {
let realm = Realm.createDefaultRealm()
if let model = self.dynamicType.fetchObjects(pinyin).filter("phrase == %@", phrase).first {
try! realm.write(needTransition) {[unowned self] in
model.frequency += self.frequency
}
}
else {
try! realm.write(needTransition) {[unowned self] in
realm.add(self)
}
}
}
}
}
然后,当用户点击其中一个时,我想在UI中显示let userInput = "input somthing"
let phraseList = CKPhraseModel().fetchObjects(userInput)
for (_,phraseModel) in phraseList.enumerate() {
candidates.append(phraseModel)
}
信息。我将调用CKPhraseModel的candidates
函数来保存更改。这一步是在主线上。
答案 0 :(得分:1)
如果你使用延迟加载功能,Realm会很快,这意味着你创建了一个直接从Realm返回[Illuminate\Database\QueryException]
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Ollie@positivelearning.com' for key 'users_email_unique' (SQL: insert into
`users` (`email`, `password`, `username`, `updated_at`, `created_at`) values (Ollie@positivelearning.com, y$rx8R0N5dVAibjpXxV0OF4uGGb7lradsl2xME
20ymMvv2YPaUWv3oq, olliepritsak, 2016-07-14 18:10:10, 2016-07-14 18:10:10))
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_username_unique'
的过滤器,因为那样你只需要检索你的元素结果中的索引。
在您的情况下,您复制所有元素。这有点慢,这就是为什么你最终冻结。