m****s 发帖数: 79 | 1 数据库小白请教(最近我在业余学习数据库,为了了解system design面试题):如果数
据库文件很大比如10GB,内存6GB,MySQL和Python Pandas分
别是怎么处理的?
看了这个链接:
http://stackoverflow.com/questions/31765123/pandas-dataframe-merge-memoryerror
感觉Pandas要加chunks处理。
而MySQL似乎内部直接处理了。文中的代码没有分批处理的大小size参数,是default的
么?
另外,在一个10GB的数据库里,搜索一个Name field里,名字叫"Mark"的一行,需要费
时多长呢?
怎么估计呢?
是不是估计软件要把这个数据文件分几部分load进memory,然后加上memory搜索的时间。
如果你没有时间解释,能否请给些链接。谢谢!
祝鸡年吉祥如意! |
h**********c 发帖数: 4120 | 2 数据库这东西发明就是针对硬盘用的。
10年左右的数据库教科书,主要讲MYSQL,有treeindex 还有hash index,去年看mYSQL
好像有新的index 种类。
如果是hash index,应该是O(M),
MYSQL 有个monitor,你可以自己编不同 size ,然后比较一下query 开销。
然后找个地方arvxiyz 一下。
另外MYSQL是开原的,可以自己变变玩,编过一次。没什么技术意义,太泛泛代码太多
。 |
n*********u 发帖数: 1030 | 3 服务器加点内存会死人吗?公司服务器内存比个人笔记本电脑还小的公司怎么想的?人
工不要钱的?
10GB又不算大数据。。。
mysql用硬盘比较狠一点,内存只是cache用,小一点他也无所谓,也就慢而已。
搜索field是看index和query,如果是搜名字完全等于“Mark”的话,如果有index会很
快,O(log n)。没index比较慢,O(n),硬盘里一行一行慢慢搜。
你只说10GB,又没说有多少行,数据库设定(myiIsam还是innodb)之类的,没法估计
时间。
pandas不确定,只是一个软件,数据都是临时load的,不像mysql可以提前加上index,
所以应该只能读到内存里再用。 |
h**********c 发帖数: 4120 | 4 hard disk I/O 6Gb/s,很简单的数学题 |
m****s 发帖数: 79 | 5 谢谢回复。
最近我在业余学习数据库,为了了解system design面试题.
》》没index比较慢,O(n),硬盘里一行一行慢慢搜。
在硬盘里一行一行搜,很慢吧。
我还以为是,MySQL自己把数据文件分成几大块,按时间顺序,读一块到内存,搜索,
记下来。
然后处理下一块。
【在 n*********u 的大作中提到】 : 服务器加点内存会死人吗?公司服务器内存比个人笔记本电脑还小的公司怎么想的?人 : 工不要钱的? : 10GB又不算大数据。。。 : mysql用硬盘比较狠一点,内存只是cache用,小一点他也无所谓,也就慢而已。 : 搜索field是看index和query,如果是搜名字完全等于“Mark”的话,如果有index会很 : 快,O(log n)。没index比较慢,O(n),硬盘里一行一行慢慢搜。 : 你只说10GB,又没说有多少行,数据库设定(myiIsam还是innodb)之类的,没法估计 : 时间。 : pandas不确定,只是一个软件,数据都是临时load的,不像mysql可以提前加上index, : 所以应该只能读到内存里再用。
|
m****s 发帖数: 79 | 6 这么简单吗?
处理中也是要读数据到内存里处理。
那么每次要读多少大小的数据到内存呢?
一行一行地读,速度很慢吧。
比如先读进500M内存,处理,接着读下面500M内存。
这个大小有什么讲究?
衔接过程中间有没有什么overhead?
【在 h**********c 的大作中提到】 : hard disk I/O 6Gb/s,很简单的数学题
|
h**********c 发帖数: 4120 | 7 你横竖要把硬盘扫一遍。比较硬盘的开销,内存是不是可以忽略了,差一个 order 左右。
具体数据库系统的课本里讲,在这里太叫真意义不大。
cache 的功能就是缓存你追进用过的,没用过的,一下就要swap,开销就大了。
其实课本上讲得也是二三十年前的理论,MYSQL, MSSQL ORCALE什么背后的优化都是技
术秘密,开原的MYSQL比企业版少很多东西。你如果装个单机的话,开原的就够了。
【在 m****s 的大作中提到】 : 这么简单吗? : 处理中也是要读数据到内存里处理。 : 那么每次要读多少大小的数据到内存呢? : 一行一行地读,速度很慢吧。 : 比如先读进500M内存,处理,接着读下面500M内存。 : 这个大小有什么讲究? : 衔接过程中间有没有什么overhead?
|