新鲜出炉,PCIE卡SQLServer和SSD Mongodb集群4千万数据insert测试

标签: pcie sqlserver ssd | 发表时间:2015-03-30 01:30 | 作者:snoopyxdy
分享到:
出处:http://snoopyxdy.blog.163.com
最近公司需要测试1亿条数据10分钟插入数据库,主要是为了数据推送留存用。
最终我们讨论给出了2套方案
1、单台sqlserver 配合PCIE卡
2、Mongodb分片集群
因为目前数据量是4千万,所以我分别对4千万数据和1亿数据进行了写入测试。
被测试机器都是24CPU,64G内存的独立服务器
测试代码运行服务器也是24CPU,64G内存的独立服务器
网络环境是内网1G带宽。

1、单台sqlserver 配合PCIE卡
新鲜出炉,PCIE卡SQLServer和SSD Mongodb集群4千万数据insert测试 - snoopyxdy - snoopyxdy的博客

性能测试总结:
使用新配置的720 PCI-E硬盘机器和SQLServer2014,性能非常强劲,单机可达3万条/秒的写入,由于前几次测试本机压测本机,对cpu有抢占情况,所以性能并没完全发挥出来。

2、mongodb测试结果
新鲜出炉,PCIE卡SQLServer和SSD Mongodb集群4千万数据insert测试 - snoopyxdy - snoopyxdy的博客

性能测试总结:
尽管Mongodb单机性能不如带PCIE卡的SQLServer,但是一旦分片,性能将提升几倍
在分4片的情况下,写入可达60000条/s
在分5片的情况下,写入可达80000条/s
另外值得一提的是,由于分片不均匀,导致90%的数据仅使用了60%的时间,剩下10%的数据仅在单点插入,所以性能下降的很厉害,如果分片足够多,我们的片键足够散列,让每片存储平均,性能还能有进一步提升。

3、汇总总结:
想要达到1亿条数据10分钟插入,必须达到插入速度在16万/秒,所以如果我们将分片达到10片,理论上就可以达到1亿条数据10分钟的插入了,由于机器有限无法完成测试,不过最终20分钟的插入速度也让人满意了。

4、最后附上py测试脚本
sqlserver测试脚本:
    

# -*- coding: utf-8 -*-
import _mssql
import pymssql
import datetime,time
from multiprocessing import Process

def getTimestampFromDatetime(d=None):
    if d is None:
        d = datetime.datetime.now()
    return time.mktime(d.timetuple())


def task(key):

    server = 'localhost:2433'
    user = 'testwzh'
    password = '123456'
    dbname = 'TCMobileNotification'
    str = u'来的真巧!这么好的东西只为你准备,你忍心让给别人吗?'

    all_data = (0,1,'d0118d2cffaf8000d0118d2cffaf8000',0,1,'2015-03-20 10:01:50.990',\
        str,'http://t.cn/RZsNwgG',71,\
        6, 9,'2015-03-27 10:01:50.990',0)
    listData = []
    for i in range(10000):
        listData.append(all_data)
    

    tableName = 'PushMessageSystem_{0}'.format(key)
    conn = pymssql.connect(server=server, user=user, password=password, database=dbname)
    cursor = conn.cursor()
    for i in range(0, 250000):
        cursor.executemany(
         "INSERT INTO "+tableName+" VALUES (%d,%d,%s,%d,%d,%s,%s,%s,%d,%d,%d,%s,%d)",
            listData)
        conn.commit()
    conn.close()


if __name__ == '__main__':
    proc_record = []
    keyList = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f',]
    for i in range(0,16):
        p = Process(target = task, args=(keyList[i],))
        p.start()
        proc_record.append(p)



    start = getTimestampFromDatetime()

    for p in proc_record:
        p.join()

    end = getTimestampFromDatetime()
    print('time: {0}s'.format(end-start))

mongodb集群测试脚本:
     

# -*- coding: utf-8 -*-
import pymongo
import json
import datetime,time
import sys
import copy
import sys, os
from multiprocessing import Process
from hashlib import md5



def getTimestampFromDatetime(d=None):
    if d is None:
        d = datetime.datetime.now()
    return time.mktime(d.timetuple())

def md5Hash(str):
    m = md5()
    m.update(str)
    return m.hexdigest().upper()

def task(key):

    mongoUri = 'mongodb://root:123456@10.1.24.75:10000/admin'
    str = u'来的真巧!这么好的东西只为你准备,你忍心让给别人吗?'

    all_data = {
        'PMSID':1,
        'PMSPushTaskID':0,
        'PMSPlatform':1,
        'PMSDeviceID':md5Hash(key),
        'PMSReadCount':0,
        'PMSVisible':1,
        'PMSCreateTime':'2014-06-24 16:40:00.000',
        'PMSContent':str,
        'PMSUrl':'http://t.cn/RZsNwgG',
        'PMSTaskSN':71,
        'PMSPushType':6,
        'PMSProductType':3,
        'PMSExpiredTime':'2015-03-27 10:01:50.990',
        'PMSContentType':0,
    }

    tableName = 'PushMessageSystem_{0}'.format(0)

    client = pymongo.MongoClient(mongoUri, max_pool_size=100)
    db = client.TCMobileNotification

    for i in range(0, 125):
        listData = []
        for i in range(10000):
            listData.append(copy.copy(all_data))
        db[tableName].insert(listData)



if __name__ == '__main__':
    proc_record = []
    keyList = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f',0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
    for i in range(0,32):
        p = Process(target = task, args=(str(keyList[i]),))
        p.start()
        proc_record.append(p)

    start = getTimestampFromDatetime()

    for p in proc_record:
        p.join()

    end = getTimestampFromDatetime()
    print('time: {0}s'.format(end-start))

相关 [pcie sqlserver ssd] 推荐:

新鲜出炉,PCIE卡SQLServer和SSD Mongodb集群4千万数据insert测试

- - snoopyxdy的博客
最近公司需要测试1亿条数据10分钟插入数据库,主要是为了数据推送留存用. 最终我们讨论给出了2套方案. 1、单台sqlserver 配合PCIE卡. 2、Mongodb分片集群. 因为目前数据量是4千万,所以我分别对4千万数据和1亿数据进行了写入测试. 被测试机器都是24CPU,64G内存的独立服务器.

PCIe-SSD卡下的xfs vs ext4对比fileio及TpmC测试

- - iMySQL
此前听说过某公司把xfs都替换成了ext4,感觉有些诧异,才有了本次测试. 此次测试本意是想对比下xfs和ext4的差异,看看xfs是否还一如既往的靠谱. 在测试的过程中,我还顺带测试了下MySQL 5.7.7和Percona-5.6.23的对比. 1、可以继续放心大胆的采用xfs文件系统;. 2、使用xfs文件系统时,无需刻意加一些优化参数,默认的(defaults,noatime,nodiratime,nobarrier)就够了;.

oracle、mysql和sqlserver分页

- - Oracle - 数据库 - ITeye博客
sql server row number分页:. mysql limit分页:. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

SSD 以及其它

- 我爱小老虎 - DBA Notes
在微博上说起了 SSD 和高端存储的话题. 在 SSD 出现之前,高端存储厂商很多年都在安稳的赚钱,尽管互相之间也有竞争,但单个设备动辄上百万,总有钱可赚. SSD + PC 服务器这个组合的出现终将革掉他们的命. EMC / HDS / IBM 这几家公司卖存储的朋友恐怕日子都比较难过. 据说苹果新的数据中心买了 EMC Isilon 的设备作为存储解决方案,12 PB 的存储(refer),不差钱的主总是有的.

SQLServer 镜像功能完全实现

- Bloger - 博客园-首页原创精华区
折腾SQLServer 镜像搞了一天,终于有点成果,现在分享出来,之前按网上做的出了很多问题. 现在尽量把所遇到的问题都分享出来. 在域环境下我没配置成果,也许是域用户的原因,因为我在生产环境下搞的,更改域用户需要重启SQLServer ,所以这个方法放弃了,只能用证书形式. 主机:192.168.10.2  (代号A).

SQLServer索引的四个高级特性

- - CSDN博客数据库推荐文章
SQLServer索引的四个高级特性. 一、Index Building Filter(索引创建时过滤).         有一些索引非常低效的,比如经常查询状态为进行中的订单,订单有99%的状态是完成,1%是进行中 ,因此我们在订单状态字段上建了一个索引,性能是提高了,但是感觉索引中保存了99%的完成状态数据是永远不会查询到的,很浪费空间.

干掉光驱、拥抱 SSD

- hama - apple4us
我几乎不用光驱,但它却占据了笔记本内相当大一部分空间(见图). 光驱用的是 SATA 接口,我决定把它拆出来,换上一块固态硬盘(后文称 SSD). 我垂涎 SSD 已久,但又有很多资料需要存储,在笔记本内保留一块大容量传统机械式硬盘(后文称 HDD)同时加装一块 SSD 做系统盘似乎是最完美的选择.

SSD 安装与优化

- - 操作系统 - ITeye博客
1.BIOS中打开ACHI,并且关闭兼容IDE,如果安装前忘记这个,可以安装后,改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msahci 的START值为0. 3.关闭休眠:cmd: powercfg -h off. 4.确认trim: cmd: fsutil behavior query DisableDeleteNotify,如果DisableDeleteNotify=1,更新主板程序一般能解决.

SSD FRESH – 一键快速优化 SSD 硬盘

- - 小众软件 - Appinn
SSD FRESH 是款专门优化 SSD 硬盘(Solid State Drive)的软件,可以延长 SSD 硬盘使用寿命以及部分性能. 青小蛙在体验过 SSD 的速度(普遍在500MB/s左右)后,就再也无法忍受普通硬盘(7200转硬盘内部传输速率约为 66MB/s)的龟速了(当然 SSD 的速度还取决于接口速度,比如 SATA2.0 只能达到 300MB/s,而 SATA3.0 则理论上可以 600MB/s).

sqlserver数据库大型应用解决方案总结

- - 博客园_首页
随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题. 对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载. 对于系统的稳定性和扩展性造成了极大的问题. 负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器.