数据库这么羸弱会不会被取缔?

本人公司新人,写代码,数据操作都是读写数据库的,代码review的时候被告诉数据库各种不靠谱,只能都改成读写缓存了。

现在数据库除了结构上的优势还有其他可用之处么?读写都用缓存不是很好?


是哪个公司的不妨曝光一下,我让朋友们千万不要去。


新人写了丁点代码就知道数据库羸弱了?佩服。

别人跟你说数据库不靠谱就真的不靠谱,再说他都说了些什么不靠谱呢?

我思故我在,不要听到别人的只言片语就得出结论,不要轻易相信别人所说的话,没有探索得出的所谓真理都是扯淡。


这个一般都有上下文的,你这简单的说这种话,颇有我党风范


cache怎么靠谱了?并发和事务管理能比oracle DB2还靠谱吗?


我以前做过xml存储的程序,你的业务如果只有十个客户,我可以保证没问题!


非数据库方向的专业人士,但是有几个观点和题主分享一下:

1. 你问【数据库这么羸弱会不会被取缔?】,这个本身问题有两个不合适的地方:

(1)“羸弱”只是相对而言,一个数据库的“健壮性”和硬件、软件的优化程度有关,总是有办法将数据库建立成某种可靠的状态;

(2)“取缔”在计算机/互联网不是规范的用语,一般可以用“取代”“取缔”通常被用在违法、违反行政规定的事物上,数据库明显不在此列

那么,数据库未来可不可能被某种技术取代?

2. 几乎不可能。因为“数据库”是个很宽泛的概念,它本身只是指“放数据的地方”。那么,到底有哪些种类数据库?

(1)一种数据结构就可以是一个数据库,比如一个链表,里面存的某种人员名单,该链表在程序运行中常驻内存;

(2)一张excel表格可以是一个数据库,有些单机程序从一张excel表格读取数据,然后做一些操作,最后将更新后的数据写入这张excel表格;该表格保存在硬盘中;

是不是发现以上两种“数据库”和常见的,比如Oracle DB, MS SQL Server很不一样?

是的。

3. 一个链表也好,一个excel表格也好,在一开始是可以满足需求的,但是随着业务需求的发展,对数据的存储、调用的需求越来越高,因此,发明了“商用数据库”,主要用来满足以下2点需求:

(1)应用程序本身不关心数据是如何存储和调用的,这方面的功能由“数据库管理系统”(DBMS)去实现;

(2)应用程序本身不关心数据的存储结构是否合理,如何优化,这方面的功能由“数据库管理系统”(DBMS)去实现。

举例:Oracle DB 是一套数据库管理系统,它有一个应用程序接口(多种,Oracle自带的,或者开源免费的,比如JDBC)。

伪代码:

...

...

...

connect(oracle_db, JDBC);

JDBC.executeQuery(" INSERT INTO Table DateOfBirth ("王刚","1978-03-15") ");

...

...

...

代码第一句:连接数据库,数据库的名字是“oracle_db”;

代码第二句:向表“DateOfBirth”中插入一条新的数据(“王刚”,“1978-03-15”);

注意:以上程序只是说,插入这条数据,具体这条数据是如何插入的应用程序本身不管,DBMS去插入;这条数据被插入后,到底是存储在一个链表中,还是一个图中,还是一个树状结构中,应用程序也是不管的,由DBMS完成

这样说,题主是否理清了一些概念?

题主认为自己公司的数据库不靠谱,可能有如下几种原因(或之一):

(1)硬件不给力,比如,如果每秒有10万条数据需要被插入数据库,而承载数据库的服务器无raid,内存只有8G,那么无论如何都不会给力;

(2)应用程序本身不靠谱,比如你要插入10万条数据,把数据一条一条插入,和把10万条数据都准备好,一次性交给DBMS插入,这两种方法的效率会差很多,前一种会明显比后一种慢

(3)DBMS对数据库的优化不完善,比如,假设某张表的数据需要经常被查询,对时间的要求很高,那个可以使用DBMS将这张表完全地放入缓存(既内存),这样比放在硬盘上要高出几个数量级的速度

4. “数据库”这个概念本身就很宽泛,没有“is_replaced”这个boolean值,打个比方,就像:“软件经常有bug,软件在未来是不是会被取代?”一样,答案是“不可能”。

5. 有其它概念不清晰的地方,楼主请问。


我猜测一下,你说的所谓的不靠谱可能是“数据库一般在不是必须要求事务的场景下qps远达不到内存中的cache的水平,而且单机数据库作为一个单点会降低整个服务的可用性”。。。


事务的ACID一致性怎么保障,设备突然故障,掉电怎么办。数据不存数据库持久化到磁盘,一次断电事故你就高兴了。小网站还凑合,你让银行等金融行业试一下,几万亿数据蒸发,你赔得起?


连nosql都在向事务,join查询发展了,谁替代谁不一定列.


缓存。。。按我理解,你说的是内存吧?内存不够用啊,也不能持久化。


一般来说,要提升数据的检索效率,常用的数据结构就两种。一是二叉树,一是哈希表。

数据库就是树结构的完整解决方案,缓存则是后者,两者的区别书上说的也很明白,二叉树保证的是最低检索效率,哈希表保证的是平均检索效率。

如果不考虑各种瓶颈,那可以举这样一个例子。如果要查询1,2,3三条数据,可能缓存的效果更好,要查询1~100的一百条数据,数据库的效果就更好了。但现在的主流系统网站来说,随机访问的场景更为普遍。

然后数据库系统更在意数据的一致性,因此花了大量的资源,瓶颈也变成了I0; 而缓存系统不用在意这个,轻装上阵的结果是效能提升的更为明显。

不能因为你的需求更适合缓存就认为数据库无用。

我不知道我在说什么,以上。


数据库不靠谱?就算效率不行,不还有内存数据库,存入到缓存?做分布式集群数据量大的时候,做频繁读写的效率难道会比数据库高?像oracle IBM这些研究了几十年数据库的公司,要被你一句数据库不靠谱,震惊到了好么。

……

所以要不带你的人不靠谱,要不你听错了,稍微有点经验的人,也不会说数据库不靠谱啊。至少接下来的几十年里,除非数据存取技术有突破性的进展,否则,数据库绝对该是主流。


读写数据库也是走缓存的,不用数据库怎么保证事务一致性


这么多人回答,我觉得根本就没抓到点好么。

改成写缓存,review者的意思应该改成使用其公司的数据库缓冲技术;

而这个题主后面提出的直接使用缓存,其是想说,直接写内存?还是其它神马缓存我不明白。

我觉得题主是对这些概念就是模糊的。


是说你直接操作数据库不靠谱吧。。。。


这个分使用场景。如果你一秒读写数据几万次或者几十万次,我想你还是用内存来刷比较好。然后数据不变了再统一保存结果到数据库。


还是第一次听说数据库“羸弱”的,再说不用数据库,数据怎么持久化呢?


码农这个行当恐怕不适合您,建议您考虑换个行当吧


推薦閱讀:

怎麼理解「premature optimization is the root of all evil」?
國產資料庫發展情況如何?
寫一個資料庫最難的地方在哪?最精華的地方在哪?分幾步?
如何評價國產高性能存儲引擎 TerarkDB ?
华为自研的数据库gaussdb怎么样?

TAG:互联网 | 数据库 | 程序员 | MySQL | 数据库性能 |