问题描述
领域版本 - 10.4.0
以下是我在项目中使用的主要领域模型类。所有这些模型都具有最多 1-2 层嵌入对象或领域模型的嵌套。
大约 10k 个条目
open class MemberRO(
@PrimaryKey
var uid: String = "",var id: String = "",var name: String = "",var imageUrl: String = "",var state: Int = 0,var removeState: Int? = null,var customIntroText: String? = null,var customClickText: String? = null,var customTitle: String? = null,var chatroomId: Int? = null,var communityId: Int? = null,var isOwner: Boolean? = null,var community: CommunityRO? = null,var chatroom: CollabcardRO? = null
) : RealmObject()
大约 1k 个条目
open class CommunityRO(
@PrimaryKey
var id: Int = 0,@required
var name: String = "",var membersCount: Int = -1,var pendingMembersCount: Int = -1,var collabcardsUnseen: Int = -1,var imageURL: String? = null,var purpose: String? = null,var about: String? = null,var updatedAt: String? = null,var memberState: Int? = null,var type: Int? = null,var subType: Int? = null,var clickState: Int? = null,var actions: RealmList<CommunityActionRO> = RealmList(),var pendingChatRoomCount: Int = 0,var openReportsCount: Int = 0,var memberRightStates: RealmList<Int> = RealmList(),var orderTime: Long? = null,var pinnedSubTitle: String? = null,var canShowPinnedBanner: Boolean? = null,var conversations: RealmList<CollabcardAnswerRO>? = null,var chatrooms: RealmList<CollabcardRO>? = null,var relationshipNeeded: Boolean = true
) : RealmObject()
大约 100k-200k 条目
open class CollabcardAnswerRO(
@PrimaryKey
var id: String = "",var chatroomId: Int = 0,var communityId: Int = 0,var member: MemberRO? = null,@required
var answer: String = "",var createdEpoch: Long = 0L,var createdAt: String? = null,var attachments: RealmList<AttachmentRO> = RealmList(),var lastSeen: Boolean = false,var link: LinkRO? = null,var date: String? = null,var isEdited: Boolean? = null,var preview: PreviewRO? = null,var replyConversationId: String? = null,var replyConversation: CollabcardAnswerRO? = null,var deletedBy: String? = null,var attachmentCount: Int? = null,var attachmentsuploaded: Boolean? = null,var uploadWorkerUUID: String? = null,var localSavedEpoch: Long = 0L,var temporaryId: String? = null,var reactions: RealmList<MessageReactionRO> = RealmList(),@LinkingObjects("conversations")
val community: RealmResults<CommunityRO>? = null,@LinkingObjects("conversations")
val chatroom: RealmResults<CollabcardRO>? = null
) : RealmObject()
大约 20k 个条目
open class CollabcardRO(
@PrimaryKey
var id: Int = 0,@required
var title: String = "",var state: Int? = null,var answerText: String? = null,var shareUrl: String? = null,var dateTime: Long? = null,var endDate: Long? = null,var polls: RealmList<PollRO> = RealmList(),var pollsCount: Int? = null,var attendingCount: Int? = null,var location: String? = null,var locationLat: Double? = null,var locationLong: Double? = null,var coHosts: RealmList<MemberRO> = RealmList(),var onlineLink: String? = null,var header: String? = null,var cardCreationTime: String? = null,var totalResponseCount: Int = 0,var multipleSelectNum: Int? = null,var multipleSelectState: Int? = null,var muteStatus: Boolean? = null,var followStatus: Boolean? = null,var creatorShareUrl: String? = null,var hasBeenNamed: Boolean? = null,var isGuest: Boolean? = null,var lastFiveUniqueMembers: RealmList<MemberRO> = RealmList(),var pollType: Int? = null,var pollTypeText: String? = null,var submitTypeText: String? = null,var expiryTime: Long? = null,var isAnonymous: Boolean? = null,var allowAddOption: Boolean? = null,var isTagged: Boolean? = null,var isPending: Boolean? = null,var chatroomExpiryTime: Long? = null,var isDraft: Boolean? = null,var updatedAt: Long? = null,var lastConversation: CollabcardAnswerRO? = null,var lastSeenConversationId: Int? = null,var lastSeenConversation: CollabcardAnswerRO? = null,var dateEpoch: Long? = null,var unseenCount: Int = 0,var relationshipNeeded: Boolean = true,var draftConversation: String? = null,var isSecret: Boolean? = null,var secretChatRoomParticipants: RealmList<Int> = RealmList(),var secretChatRoomLeft: Boolean? = null,@LinkingObjects("chatrooms")
val communities: RealmResults<CommunityRO>? = null
) : RealmObject()
读取工作非常快,并且由于反向关系,数据在 50 毫秒内查询。 但是写事务非常非常慢。
对于如下所示的非常简单的写入事务,需要 > 20 秒才能完成。
realm.executeTransactionAsync { bgRealm ->
val conversation = bgRealm.where(CollabcardAnswerRO::class.java)
.equalTo("id","123").findFirst()
conversation?.answer = "Hello"
}
我使用日志检查了事务,发现写入事务块在
此外,我发现一件有趣的事情,如果我通过在协程 IO 调度程序中调用没有异步的 executeTransaction 来执行相同的写事务,它会将写事务加速到 5-10 秒。但还是5-10秒不好。
此外,我尝试删除任何通知侦听器,因为差异检查需要时间,但这并没有多大帮助。另外,我的写交易没有被其他交易阻止,我已经确认了这一点。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)