数据库里如何存储 Markdown, Textile 这样的语法文本

有两种不同的方法:

  1. 转成 html 格式保存进数据库,编辑的时候需要转换,读取的时候无需转换
  2. 直接保存原始语法格式,编辑的时候无需转换,读取的时候转换成 html

这两种方法各有什么利弊,怎样选择呢?

阅读 24.2k
6 个回答

数据库保存markdown,html渲染放缓存。

我的项目里没有markdown,但是对用户输入涉及很多转换处理。把转换处理后的html放入redis,设置一个较长缓存时间1个月,这样就兼顾了原始输入的保留和渲染效率。

  • 任何一个系统,都是远远大于,因此,耗时的操作一般放在,但是我并不建议在数据库里面存 html 文件,因为数据库要存放原始数据,毕竟这些数据需要反复编辑。

  • 为了提高的性能,可以把 markdown 转换成的 html 放入缓存。

  • 这样还可以节省一次转换开销。

在数据库保存原始语法格式,可以在写数据库的同时写一份缓存,前台显示的时候从缓存读,编辑内容的时候从数据库读取。

我有一个建议,两种格式都存放,现在的存储空间并不贵,只是多保存了一次,虽然有点违背原则,但有很多优点:

  1. 展示的时候直接读取 html,速度很快,读的次数远远多于写的次数
  2. 编辑的时候读取 markdown,能减少诸如 XSS 之类的安全问题
  3. 代码只需写 markdown to html 部分,免去 html to markdown
  4. 即使将来 markdown 版本修改了,或者不再使用 markdown 了,旧的数据仍然能正常显示

用空间换取效率,一气呵成。

建议存html,毕竟是通用格式。

以前,都直接用的html编辑器,后来MD火了,大家又换MD编辑器,但如果哪天又出了个XX。。

我的建议是数据库必须存放用户输入的原始数据
如果不这么做,哪一天用户想查看或者编辑自己的数据内容,却发现程序自作聪明把内容给变了,用户做何感想?(以前的百度空间就有这个问题,后来再也不用了)

至于速度的问题,在使用varnish等前端缓存的情况下(varnish还支持esi),其实这个问题我真不觉得有多大。

推荐问题
宣传栏