B***r 发帖数: 79 | 1 请指教下面两道系统设计问题如何解答?
1. Multiple threads need to write to the same log file.
2. How to load 20GB file into 10GB memory?
多谢! |
r*****s 发帖数: 1815 | 2 不算系统设计吧
多个线程同时写,既然是log,我们假设就是append,那么每个线程先写自己的文件,
然后另起一个进程merge就好了,很类似ST
20G文件load进10G内存,没有context很难答,因为完全不明确想要什么。。。我猜测
大概是说分页,虚拟内存? |
c*******a 发帖数: 1879 | 3 你题刷的差不多了?
还不赶快去面试
【在 r*****s 的大作中提到】 : 不算系统设计吧 : 多个线程同时写,既然是log,我们假设就是append,那么每个线程先写自己的文件, : 然后另起一个进程merge就好了,很类似ST : 20G文件load进10G内存,没有context很难答,因为完全不明确想要什么。。。我猜测 : 大概是说分页,虚拟内存?
|
r*****s 发帖数: 1815 | 4 不够啊,POJ还没刷到1000
: 你题刷的差不多了?
: 还不赶快去面试
【在 c*******a 的大作中提到】 : 你题刷的差不多了? : 还不赶快去面试
|
r*****s 发帖数: 1815 | 5 另外一个代码层面的解决办法是先扔到一个队列里,然后由一个tread统一写进磁盘。
。。
既然无论如何都有缓存,这也未尝不可。。。
: 不算系统设计吧
: 多个线程同时写,既然是log,我们假设就是append,那么每个线程先写自己的
文件,
: 然后另起一个进程merge就好了,很类似ST
: 20G文件load进10G内存,没有context很难答,因为完全不明确想要什么。。。
我猜测
: 大概是说分页,虚拟内存?
【在 r*****s 的大作中提到】 : 不够啊,POJ还没刷到1000 : : : 你题刷的差不多了? : : 还不赶快去面试 :
|
c*******a 发帖数: 1879 | 6 不管怎么样, 你都逃脱不了 需要LOCK的命运。
【在 r*****s 的大作中提到】 : 另外一个代码层面的解决办法是先扔到一个队列里,然后由一个tread统一写进磁盘。 : 。。 : 既然无论如何都有缓存,这也未尝不可。。。 : : : 不算系统设计吧 : : 多个线程同时写,既然是log,我们假设就是append,那么每个线程先写自己的 : 文件, : : 然后另起一个进程merge就好了,很类似ST : : 20G文件load进10G内存,没有context很难答,因为完全不明确想要什么。。。 : 我猜测
|
r*****s 发帖数: 1815 | 7 不需要,举个例子,一个线程写文件,写30秒,就切换到下一个文件了
然后merger对前面那个已经写完的文件就可以随便read了。
完全不需要lock
queue理论上也不需要lock,但是实践上lock free的性能未必好,所以一般还是用lock
的。
: 不管怎么样, 你都逃脱不了 需要LOCK的命运。
【在 c*******a 的大作中提到】 : 不管怎么样, 你都逃脱不了 需要LOCK的命运。
|
c*******a 发帖数: 1879 | 8 merge itself is acting as a lock!
ACT AS OWNER! OK
lock
【在 r*****s 的大作中提到】 : 不需要,举个例子,一个线程写文件,写30秒,就切换到下一个文件了 : 然后merger对前面那个已经写完的文件就可以随便read了。 : 完全不需要lock : queue理论上也不需要lock,但是实践上lock free的性能未必好,所以一般还是用lock : 的。 : : : 不管怎么样, 你都逃脱不了 需要LOCK的命运。 :
|
B***r 发帖数: 79 | 9 看起来多线程写到同一个文件没法不 LOCK 啊。想不出更好的办法。那道Load 文件到
内存的问题,我感觉是要问面试官一些细节要求,可是不知道怎么问。
【在 c*******a 的大作中提到】 : merge itself is acting as a lock! : ACT AS OWNER! OK : : lock
|
j**********r 发帖数: 3798 | 10 看来都是新警察,内存开个缓冲区先往那里写,然后再写到文件上就是。Async
logging都是这样做的。
【在 B***r 的大作中提到】 : 看起来多线程写到同一个文件没法不 LOCK 啊。想不出更好的办法。那道Load 文件到 : 内存的问题,我感觉是要问面试官一些细节要求,可是不知道怎么问。
|
r*****s 发帖数: 1815 | 11 和我五楼说的有啥区别
: 看来都是新警察,内存开个缓冲区先往那里写,然后再写到文件上就是。Async
: logging都是这样做的。
【在 j**********r 的大作中提到】 : 看来都是新警察,内存开个缓冲区先往那里写,然后再写到文件上就是。Async : logging都是这样做的。
|
j**********r 发帖数: 3798 | 12 作为老警察,碰到这种实际问题。不应该支支吾吾找各种可能办法,而是应该指出主流
解决方案,顺带把下面三个follow up问题不问就回答了,直接把面试官一波搞定。
Async
【在 r*****s 的大作中提到】 : 和我五楼说的有啥区别 : : : 看来都是新警察,内存开个缓冲区先往那里写,然后再写到文件上就是。Async : : logging都是这样做的。 :
|
r*****s 发帖数: 1815 | 13 我开始的时候以为问的是WAL。
我说的是LSM的标准办法。
: 作为老警察,碰到这种实际问题。不应该支支吾吾找各种可能办法,而是应该指
出主流
: 解决方案,顺带把下面三个follow up问题不问就回答了,直接把面试官一波搞
定。
: Async
【在 j**********r 的大作中提到】 : 作为老警察,碰到这种实际问题。不应该支支吾吾找各种可能办法,而是应该指出主流 : 解决方案,顺带把下面三个follow up问题不问就回答了,直接把面试官一波搞定。 : : Async
|