大佬们好,我现在遇到一个问题,希望大佬可以帮忙解答一下。
我需要在一个数据库里读取数据,现在这个数据库的现状是:
我的问题描述的差不多了。
我现在的想法是,通过一个后台线程,定时的去查询数据库,然后将 join 之后的数据,插入到我的数据库中。然后我的 web 引用只需要查询我的数据库,就免去了 join 的操作。速度会有大的提高。至于缺点呢,我能想到的就是,因为需要定时计算,所以最新的几个小时的数据,我没法提供查询。
各位大佬,面对这样的问题,您有什么解决方案吗?
您觉着我的这个方案可行吗?
谢谢啦!
1
234747005 2017-07-28 17:42:37 +08:00
首先你要说一下你在用的是什么数据库。。
|
2
noNOno 2017-07-28 17:42:53 +08:00
做个缓存,当然可以了。
|
3
hujianxin OP |
5
suixn 2017-07-28 17:49:47 +08:00 1
|
6
hujianxin OP @suixn 只用我的库也是不行的,我的问题不是数据传输慢,而是 join 什么的速度慢,用我自己的数据库也是很慢很慢,
|
8
asen477 2017-07-28 17:56:36 +08:00
做数据缓存,能解决部分问题。
|
9
syncher 2017-07-28 17:59:10 +08:00
看到 #3 中的 Oracle, 吓得我撒腿就跑!
|
10
assad 2017-07-28 18:04:08 +08:00
忍吧,别人的库,你没法搞这个那个的,唯一能优化的,就是结果缓存。
什么分表,索引,你有权限改么,没的话就没什么办法了 |
13
LosLord 2017-07-28 18:05:45 +08:00 via Android
select * form table 全查过来
|
14
fds 2017-07-28 18:05:52 +08:00
用户查询后就立即把这次查询出来,但注明查询中。等一会儿有结果了,通知用户查看结果。结果永久保存在本地,可以随时查看。既然查询速度不能提高,只能是让用户忍忍咯。或者你缓存下结果,如果有一个用户查过了,其他人可以直接看。
|
15
sampeng 2017-07-28 18:24:41 +08:00
你这相当于数据缓存了。。当然可行。问题就在于重新 flush 你自己的数据缓存的时间。新数据会得不到。
如果对方系统你可以干预,让他在 insert 的时候通知一下你去更新你数据库 |
16
hujianxin OP @fds 可以通过邮件通知,是个好方法,谢谢啦!能在一定程度上解决这个设计很渣的现状。缓存在本地的话,估计会占用大量的内存,缓存过期,还是很渣,我自我感觉,缓存在我这个问题上,发挥的作用可能不太大。
|
17
hujianxin OP @sampeng 谢谢提出建议。我的这种情况,不算缓存吧,我是把整理后的结果放到我自己的 mysql 里面了,然后加上索引,避免了 join,所以速度会快。您说的 flush 数据缓存,我不太明白呢,希望您能说的具体一下,谢谢了。对方的数据库,不让动呀,我打算一个小时增量查询一次。然后继续插入我的数据库。
我这样描述的话,您觉着合适吗? |
18
misaka19000 2017-07-28 18:36:01 +08:00 via Android
增加定时抓取的频率,尽可能保证数据完整
|
19
danielmiao 2017-07-28 18:37:16 +08:00
扔到 es 做检索
|
20
stabc 2017-07-28 18:39:38 +08:00
我读到一半首先想到的就是你自己的这个方案,就是读到自己的数据库里。
最新数据的更新方案,不了解你的具体业务流程也没法给意见,唯一的意见就是按照这个思路走下去吧。 |
21
wangchen 2017-07-28 18:57:16 +08:00
@hujianxin 你的方案是正确的,问题在于同步的频率和方法。
这里面有四个部分,数据源、数据同步工具、数据转换工具、目标数据库。 - 数据源,指那个只读库。 - 目标数据库,指你自己设计的数据库,它可以与数据源采用不同的结构,面向查询优化。 - 数据同步工具,不要去同步复杂查询的结果,要按主键同步每一个需要的表,速度快、可增量。 - 数据转换工具,把增量数据转换成目的数据库要求的形式。 |
22
ihaveobj 2017-07-28 19:09:32 +08:00
放你自己数据库后,如果别人更新了怎么办?如果只是增量那倒是可以
用其他人的数据很被动,感觉还是加一层缓存,内存怕太大可以用文件缓存,优化一下应该能用 |
23
SlipStupig 2017-07-28 19:15:20 +08:00
分片 缓存 读写分离
|
24
hujianxin OP @misaka19000 好的,谢谢您的建议!
@danielmiao es 我倒是用过,但是没深入的研究,你的建议非常好,我回去研究一下。 @stabc 好的,谢谢! @wangchen 非常感谢,原来还有套路啊,却是,同步频率这个我可以比较轻松的优化,同步工具的话,我需要回去查一下,有什么好的工具不,谢啦! @ihaveobj 别人更新表结构的话,我可以更新我的导入程序,但是我这边的表结构就不变化啦。文件缓存这个,我回去研究一下,感谢! |
25
ncisoft 2017-07-28 20:14:13 +08:00 via Android
改业务需求吧,oltp 不是给你干 olap 业务的:10 万条数据需要 5 分钟吧。oltp 没有这种查大数据集的用法,btree 不适合干这个
|
26
six880214 2017-07-29 00:46:59 +08:00
先看表结构,主键,外键和索引。然后尽可能的优化 sql,然后再想别的方法。
|