mysql数据库⼤⽂本_超长⽂本,⽤什么数据库储存?
以下所有条⽬都来源于互联⽹⽂章的⼆次加⼯,如有雷同,概不承认
没做过相关⼯作,纯理论分析⼀波,欢迎讨论:
条⽬⼀:如果是创业初期,直接⽤最熟悉的数据库就好
⽐如MySQL。
这样的做是有好处的,就是糙快猛。创业初期,最重要的是把项⽬做出来并上线。业务能不能活下来还不⼀定呢,想太多⾼性能、⾼可靠、易运维的事都没有太⼤的意义。
简单可靠才是最需要关注的。
条⽬⼆:不建议使⽤MySQL的TEXT类型
mysql存储文档像blob和text这样的字段,名义上是为存储很⼤的数据⽽设计的类型。但这正因为如此,这跟关系数据库使⽤table的设计理念是冲突的。table中的每⼀列数据都是定长的,⽐如varchar(32)。但blob和text的上限太长了,MySQL不可能将它们存储在table中,因⽽会使⽤专门的外部存储区域进⾏存储,数据⾏内存储指针。这样做的其中⼀个结果是会导到多⼀次磁盘IO,性能开销⽐较严重。
条⽬三:新闻类⽂本直接静态化扔Nginx或OSS就好
频繁读不频繁写的新闻资讯类⽂本,在保存的时候,直接写成静态的html,访问的时候直接从nginx返回。这样做,不仅可以节省服务器资源,还可以利⽤CDN加速,把⽂件放到离⽤户最近的CDN服务器上,既便宜⼜快。
OSS是另⼀个可选的⽅案。OSS的优势是对图⽚和视频存储做了⼤师针对性优化,⽐如缩放图⽚和视频转码。另外,⼏乎所有的OSS云服务都⾃带CDN加速服务。
熟悉程度和价格可能仍然是很重要的选择因素。
条⽬四:笔记类产品MongoDB可能是个不错的选择
简述MongoDB的特点如下:偶尔丢数据:在开发者⽔平相当的情况下,MongoDB更容易⿎励开发者做出不恰当的设计从⽽导致数据丢失。如果你的数据特别重要(⾦融、交易),那么关系型数据库可能是个更好的选择。对笔记类产品吧,可能没那么疼,忍⼀忍就过去了。
⽆schema:不需要预定义的schema,以⽂档(json, bson)形式保存数据,同⼀个集合(对应关系数据库的表)中的不同⽂档可以使⽤不同的结构,并⽀持随时向扩展任意字段。这个特点导致MongoDB特别适合存储商品参数这类名⽬繁多⼜不尽相同的参数。在在游戏、电商、社交、直播、物流等领域都能
看到MongoDB的⾝影。
当然,随之⽽来的问题就是如果代码结构不够清晰,很可能导致没有任何⼈知道数据库中存储的数据是什么格式。对接⼿他⼈代码的⼈员,如果不能确定⽂档中有哪些字段 ,则可能导致相当危险的结果。如果你的数据模式⽐较固定的话,⼀个变通的⽅案是通过protobuf这种序列化协议引⼊外部模式。
这对笔记类产品谈不上好或者坏,毕竟笔记的主要内容是⼤段不需要解析的⽂本。
单⽂档查询速度快:MongoDB使⽤BTree结构(对⽐MySQL使⽤B+Tree),针对单⽂档的查询做了⼤量节约IO的优化,因此查询速度很快,当然吃内存也是毫不含糊。
多表联查功能弱:笔记产品不太需要。
事务功能弱:4.0以上的版本已经⽀持基于Replica Set的事务,但在此之前只⽀持单⽂档的原⼦操作。对笔记来产品来说,弱化事务的使⽤可以提⾼数据写⼊效率。
提供全⽂索引,这个对笔记类搜索有⽤(但中⽂⽀持弱不少 = = )。
原⽣⽀持sharding(分⽚),升级数据库容量时分⽚间的数据可以⾃动迁移,这对海量数据的扩容简直不要太nice。
条⽬五:其它数据库产品MySQL,关系数据库,强在事务和关联查询
Redis/Memcache,内存数据库,主要⽤作缓存,不适⽤于长⽂本处理
ElasticSearch,全⽂搜索,虽然楼主没提,但在笔记类产品的确有这种需求。但仔细想⼀下,个⼈笔记量是否真的需要上ES才能满⾜需要呢?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论