title: 如何提高数据查询的效率?
tag:实时数据同步
首先需要理解 Wilddog Sync 数据结构类似 NoSQL 类型,数据以 JSON 为格式进行存储。没有传统关系型数据库中的表和记录等概念。
所以在设计数据结构时,可以添加必要的冗余,以提高查询的效率。
例如,你需要设计一个聊天室的数据结构,该结构包含两个对象: user 和 room。两者是双向关系: user 可以属于多个room,room 可以包含多个user 。
{"users": {"Chen": { "name": "Mary Chen" },"Rinchen": { "name": "Byambyn Rinchen" },"Madi": { "name": "Hamadi Madi" }},"rooms": {"room1": {"name": "Alpha Tango","members": {"user1": "mchen","user2": "brinchen","user3": "hamadi"}},"room2": { ... },"room3": { ... }}}
如上设计,当 user 需要查询自己属于哪个 room 时,该数据结构会遍历所有的 room,效率极低。更严重的是,如果 user 没有权限查看所有的 room,就不能实现需求。
正确的做法如下,在 user 下存入所属 room 的信息:
{"users": {"Chen": {"name": "Mary Chen",// 在Mary的数据下,建立他所属 room 的索引。"rooms": {"room1": true,"room2": true}},...},"rooms": { ... }}
这样只需要读取/users/Chen/rooms/$room_id,看它是否为null 就可以了。
但这样做需要注意,如果user 和 room的关系发生变化,就需要更新两个地方的数据。
