数据库这么羸弱会不会被取缔?
本人公司新人,写代码,数据操作都是读写数据库的,代码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怎么样?