比如多个数组,需要联合查询,自己写要做多个循环,比较,等等。
但是用SQL就一条语句,简单很多。
数据是不是在内存,和用不用SQL是两回事。
不明白为什么C/S才要用SQL,B/S不用SQL,用什么访问数据库?
ACoder说的没错。我认为内存数据库用于保存临时数据的原因是,数据在内存里不安全,不可能实时备份。而且内存数据库相对于传统数据库的最大优势是速度。
>>>但是用SQL就一条语句,简单很多。
>>>数据是不是在内存,和用不用SQL是两回事。
>>>不明白为什么C/S才要用SQL,B/S不用SQL,用什么访问数据库?
用SQL检索数据,效率是很低的。因为它对于C/S与rDBMS有特殊的效用,付出这代价是划算的。现在放进内存里了,这需求就没有了,我们不脱裤子就可以放屁了。
SQL又不支持OO。如果支持OO,那倒还可以考虑。
B/S,其实也是C/S,确切地说,是Web形式的C/S。只要是C/S模式,只有是关系型数据库,就离不开SQL。反过来说,进了内存,就不必再SQL了。
不明白特殊效用指什么。说SQL效率低,我不是很赞同,至少目前没有更好的方案来替代SQL和RDBMS。
>>SQL又不支持OO。如果支持OO,那倒还可以考虑。
OO不是万能的,不支持OO就不考虑,是不是有点过了。
>>反过来说,进了内存,就不必再SQL了。
进了内存还要SQL的原因是可以保护原有投资,只需要把原有的临时数据表放到内存数据库,基本不用作大改动就可以提高性能。
这世界上不是所有系统都是OO的,为了提高性能就用OO重写老系统,有必要吗?
还是那句话,即使OO是非常好的,也不代表是万能的,可以打倒一切其他技术。
首先不是每个人都能写出最优的查询算法的,使用遍历的方式的时间复杂度是最高的,必须使用二分法等方式进行查询,第二个数据库的存储并不是一条记录一个段内存的存储,之所以叫关系型数据库是因为使用了数学上的原理,通过映射等一些方式的组合出的结果。第三数据库可以通过牺牲空间来设定索引,通过索引可以直接找到相应的记录。
数据库本身就是OO的,他认为一切都是数据,如果你从业务分析的角度,一个数据库面对的对象不应该是数据么??
你用SQL很轻松,可机器却因你的潇洒而费了大劲了。
用汇编语言或机器语言写代码,你最费力,可机器最轻松。
用C语言写代码,你轻松不少,可机器也费劲不少。
用其它高级语言写,轻松更多,机器也费劲更多。
用SQL写,可机器最辛苦了。
我同意用汇编写的代码执行效率高,但是开发费用你考虑过没有,花更少的钱换台好机器,性能恐怕更好。而且高级语言写的程序可读性和维护性更好。
机器辛苦是正常的,怕机器辛苦干脆人来干好了,还要计算机干什么。
1.什么时候我们的系统需要内存数据库支持。
//a. 原有DBMS性能不够,不满足需求了;b. 原有系统必须平滑地使用内存数据库,即不需要大的改动;c. 数据不是特别重要,即使丢失不会造成运行问题、用户投诉问题等. d. 数据量不会很大。
//我们的系统当时是用oracle,后面局方要求能支持更大的用户数,oracle成瓶颈了,所以考虑用内存数据库替换的方案;使用内存内存数据库对系统当然改动很小,只需要更改db url即可;我们的用户数据不是很重要,在运行过程中是经常更新的,而且在某种条件下还会自动清除;至于数据量,内存始终是比磁盘小,所以一般只将频繁访问的数据放在内存数据库。
2.如果我们项目需要内存数据库支持,我们需要自己设计内存数据库吗?还是有第三方开发的内存数据库,有哪些可用的内存数据库产品可用,最好是开源的。
//当然有开源的了,就看性能能不能满足你们应用的需求。我们当时研究了H2DB,它的多线程搞的很差,后来重写了这部分,性能确实要比oracle好。(目前还没有商用,只是做了模拟测试)
3.开发内存数据库难度大吗,如何开发,需要什么技术。大体步骤是什么?
//具有普通DBMS功能的内存数据库的开发难度应该很大,我们当时写H2DB的C驱动就弄了好久。其实还有一种似分布式缓存的"内存数据库",数据实际上可以保存在HashMap中,client通过socket与之通信,我们另外一个系统也有用。
4.既然是内存数据库。那么数据都放在内存。。要是断电数据不丢了吗。如何保证数据不意外丢失。
//目前我们的数据不是很重要,所以没有考虑这个问题。
5.既然是数据库,那么如果如果无限存储的话,那对内存也就需要无限支持。是不是用内存数据库的系统一般数据量都有限呢。
//参考1的回答。
希望对LZ有用。
2 内存数据库可以持久化,所以不存在断电数据丢失的问题。而且内存数据库也有完备的备份,HA方案。
3 TimesTen是关系型内存数据库,我记得ExtremeDB是对象型内存数据库,这两个都是收费的,比较贵!当然也有很多开源的,但是开源的功能上不完善。
4 内存数据库比较耗内存,但现在内存很便宜,据说通信行业有用250G内存来存储数据
现在固体硬盘发展很快,容量上升与价格下降都可以用“飞快”来形容。这个不需要新技术。
2)对于小数据量
干脆不用数据库,都放在内存里,内部电池备用。我的导航仪就是这样。
楼上说的导航仪我不太懂,印象是它后面有更大的可靠的卫星备份在撑着,而且好像不需要写入数据。
内存数据库能不能做好集群我也很想知道。
感觉memcache那种方式把一切都扔进map里也应该算内存db,但是不支持传统sql,一切用key操控,当然也没有那么多统计函数可用。我们有一部分数据是用这种方式管理的,但是这些数据都是可以安全重建的,不需要备份。