2 lj w lj_w 于 2016.04.10 22:27 提问

TCP接收数据,频繁操作数据库怎么解决?

1.数据库存储问题
由于tcp不定时不间断的上报数据,1秒10条左右,这样高频率的操作数据库一定是不合理的,那怎么来解决问题呢。
ps:我用TCP收集上报上来的ip地址(源IP+目的IP),如果已经存储了就更新访问次数,如果源源ip没有存储,就新增,一次会有多条源IP+目的IP;
我的想法是把处理逻辑放到存储过程中实现:
(1)数据进入临时表
(2)存储ip的A表与临时表通过sql比较,相同的插入,不同的更新访问次数。
(3)将A表的源IP过滤重复,生成一个新表,用于业务需要。
现在的效率是调用一次存储过程花费的时间是400ms左右,1秒可以存储2次。而存储过程的接口是可以支持批量插入的。所以需要一个缓存,把收集的记录缓存起来,批量执行效果更好。
但是,需要考虑几个问题:
1.缓存大小,根据存储过程一次执行批量更新的大小
2.执行存储过程的时机,2种情况,
(1)缓存达到限定大小。
(2)一段时间检查缓存是否有数据未提交。
(3)同时操作缓存问题。
批量执行没有实现,可以尝试一下看看,效果。

4个回答

hxcm_net
hxcm_net   2016.04.10 22:33

区分写入和读操作,加入缓存机制,批量操作。

Dai444026042
Dai444026042   2016.04.10 22:32

是不是可以在程序中做一个缓存 达到一定数据量 或一定时间间隔才提交一次 不知道对时效性有没有要求。

renwotao2009
renwotao2009   2016.04.10 22:38

读写数据库时根据实际情况做缓存,

caozhy
caozhy   Ds   Rxr 2016.04.10 22:41

对于电子计算机来说1秒10条左右都不合理,那干脆用算盘好了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
TCP/IP实现数据接收并保存到SQLSERVER数据库
这是一个TCP/IP的程序,通过ONRECEIVE接收客户端连接,接收数据进行显示,并且能够显示到界面上,把符合条件的数据保存到SQLSERVER数据库中。其中,还有LISTBOX的横向滚动条的显示的内容,每次接收的内容滚动到控件的最底部显示。
高并发访问数据库问题
在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节: 使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。 上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。
TCP发送接收数据(一)
TCP发送接收数据
TCP接收到重叠数据(overlap)后的行为解析-附带一个有关Delay ACK和超时重传的优化
本文写于国庆长假第一天早晨,正好碰到今天热线值班,终于不用假期出去添堵折腾了(14年来[自离开高中],从来没有过过一个完整的可以休息的假期!预定了N次在家的假期,失败了N次,谎称过几次加班,但也不是长计,因为必须要离开家,实在也没地方去,我觉得此生假期难自由了,然而如果公司硬性规定必须在家值班,那也是不啻一种上好的方法啊!哈哈),作文一篇,以表达对假期自由的感慨!最开始的事实首先,我们先明确Lin
socket C 客户端发送数据到服务端,操作mysql数据库
服务端程序#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<malloc.h> #include<mysql/mysql.h>#define
TCP协议接收与发送数据
TCP: 建立连接通道 数据无限制 速度慢 可靠 TCP协议发送数据: 1:创建发送端的Socket对象 这一步如果成功,就说明连接已经建立成功了。 2:获取输出流,写数据 3:释放资源 public static void main(String[] args) throws IOException { // 创建发送端的Socket对象
很实用的端口接收数据并存储到数据库中的程序
通过11000端口接收数据,然后进行解析插入到数据库中。
服务器TCP接收数据并存入access数据库VB程序(支持多线程)
服务器TCP接收数据并存入access数据库VB程序(支持多线程)
C#使用Socket发送和接收TCP数据示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; using System.Text; namespace TcpSocketA
c#中tcp协议服务器同时接收客户端的数据
 //服务器为每一个连接客户端产生一个线程,这样接受多个连接: private TcpListener tcpListener; private Thread listenThread; public Server() {     this.tcpListener = new TcpListener(IPAddress.Any, 3000);     this.listenT