我只需要一个想法,而不是一些代码。
有一个应用程序,它允许用户建立多个充满歌曲的播放列表。每个播放列表都使用sql table保存database.This中的歌曲,为用户提供了对每个播放列表进行异步更改的机会(例如,删除或添加新歌曲)。
但是,当我想搜索所有的数据库表(->播放列表)来寻找一些歌曲时,我必须加入所有这些表,这是一个缓慢的问题。
Pros->Allows用户异步对每个播放列表进行编辑
Cons->Slow on searching,大数据库文件
第二条路
另一种方法是使用一个表来保存所有播放列表中的所有内容,但是用户不能在每个播放列表上异步添加或删除歌曲(必须等待->表被锁定),但是搜索只在一个表中进行。
Pros->database是较小的,因为没有重复的歌曲存在,搜索相当容易
Cons->user不能在每个播放列表中异步添加或删除歌曲(我不想要的实际问题)
问题是:
有什么方法可以同时具有速度和异步性.?
发布于 2016-06-27 08:18:09
我建议你采用经典的多对多的方法。
您可以有一个songs表和一个playlists表。一首歌可以是许多播放列表的一部分,一个播放列表可以包含多首歌曲。为了对此进行建模,您创建了一个关系表,该表将一首歌曲映射到一个播放列表--基本上您只需要歌曲id和播放列表id。您也可以向关系中添加其他信息(例如,歌曲在播放列表中的位置,等等)
在查询时,大部分时间都需要将3个表连接在一起(取决于搜索逻辑)。您可以尝试通过设置正确的数据库索引,甚至准备一些视图来加快速度,从而使其变得更聪明。
我不太清楚为什么您认为您实际上对数据库进行了异步更改。在内部,SQLite以串行方式执行所有命令,一个接一个。避免死锁的关键是保持事务尽可能短。由于从这些表中插入、更新和删除应该非常快,我认为您根本不应该担心对播放列表进行并发更改。
发布于 2016-06-27 08:18:55
您不是在为用户正在构建的每个播放列表创建表,对吗?
我认为你需要三张桌子:
Songs
| id | Artist | Name |
| 1 | Michael Jackson | Billie Jean |
| 2 | Rick Astley | Never gonna give you up |
| 3 | Led Zeppelin | Stairway to heaven |
Playlist
| id | Name |
| 1 | My first playlist |
| 2 | My second playlist |
Playlist songs
| playlist | song |
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 2 | 3 |https://stackoverflow.com/questions/38048627
复制相似问题