情況是這樣的,寫文章的時候需要用 ajax 插入文件、圖片。
附件 attachments
表裡有
object_model
object_type
object_id
這幾個字段。
而文章表不記錄任何附件信息。
attachments
表中的 object_id
就是文章對應 id ,所以寫入 attachments
表的時候,需要獲得這個 id ,但文章沒發的時候是不會有這個 id 的。
那麼:
1 ,用 max ()+1 的方式去猜測文章發佈出來的 id ,但這樣單用戶還好,多用戶併發就會有預想不到的問題。
2 ,插入文件的 object_id
為 0 ,提交文章的時候再批量更新,但是這樣一來,如果文章最後沒提交,上傳的文件就白上傳了,因為沒入庫,後期無法查詢到這些附件並清除。
3 ,新建文章的時候先 init ,也就是當成編輯處理,但這樣也有缺陷,那就是可能導致文章 id 不連貫的問題。
所以,想問問大家有沒有更好的方案?
1
orvice 2015-09-01 22:59:59 +08:00
3 ID 为啥要连贯...
|
2
xinple 2015-09-01 23:38:45 +08:00
先存到临时表,发布文章成功了,搬到正式附件表;如果上传之后关掉了没发布文章,上传的附件就是垃圾文件,定期清理临时表和对应的文件,可以每次清理 12 小时以前的,以免把正在写文章的人附件清理掉。
|
5
shiniv 2015-09-02 00:18:41 +08:00
object_id 留空,然后用计划任务的方式定时清理
文章发表就把文章的 ID 更新进去 |
6
cxbig 2015-09-02 00:51:39 +08:00
我的做法:
每个新文章自生成一个 hash ,用这个 hash 做 attachment 的目录。 如果文件成功保存,一切安好; 如果放弃编辑了,比对文章 hash 和 attachment 文件夹即可清理多余内容。 |
7
ljbha007 2015-09-02 01:21:49 +08:00
你先上传附件再写文章表 然后再写 attachments 表就行了啊
|
8
msg7086 2015-09-02 01:34:06 +08:00 via Android
多媒体数据和文章分开存啊。先上传再插入再发表。
|
10
zhyu 2015-09-02 09:32:42 +08:00
说正经的,文章表加个 publish 的标记字段。
|
11
wolong 2015-09-02 15:56:03 +08:00
第二个方法好,如果文章没提交,下次打开写文章页面时清除掉上次上传的附件。
|