开放缓存服务( Open Cache Service,简称OCS)是基于内存的缓存服务,支持海量小数据的高速访问。OCS可以极大缓解对后端存储的压力,提高网站或应用的响应速度。OCS支持Key-Value的数据结构,兼容Memcached协议的客户端都可与OCS通信。
OCS 支持即开即用的方式快速部署;对于动态Web、APP应用,可通过缓存服务减轻对数据库的压力,从而提高网站整体的响应速度。
与本地MemCache相同之处在于OCS兼容Memcached协议,与用户环境兼容,可直接用于OCS服务 不同之处在于硬件和数据部署在云端,有完善的基础设施、网络安全保障、系统维护服务。所有的这些服务,都不需要投资,只需根据使用量进行付费即可。
OCSWriter是DataX实现的,基于Memcached协议的数据写入OCS通道。
- 这里使用一份从内存产生的数据导入到OCS。
{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"column": [
{
"value": "DataX",
"type": "string"
},
{
"value": 19880808,
"type": "long"
},
{
"value": "1988-08-08 08:08:08",
"type": "date"
},
{
"value": true,
"type": "bool"
},
{
"value": "test",
"type": "bytes"
}
],
"sliceRecordCount": 1000
}
},
"writer": {
"name": "ocswriter",
"parameter": {
"proxy": "xxxx",
"port": "11211",
"userName": "user",
"password": "******",
"writeMode": "set|add|replace|append|prepend",
"writeFormat": "text|binary",
"fieldDelimiter": "\u0001",
"expireTime": 1000,
"indexes": "0,2",
"batchSize": 1000
}
}
}
]
}
}
-
proxy
- 描述:OCS机器的ip或host。
- 必选:是
-
port
- 描述:OCS的连接域名,默认为11211
- 必选:否
- 默认值:11211
-
username
- 描述:OCS连接的访问账号。
- 必选:是
-
password
- 描述:OCS连接的访问密码
- 必选:是
-
writeMode
- 描述: OCSWriter写入方式,具体为:
- set: 存储这个数据,如果已经存在则覆盖
- add: 存储这个数据,当且仅当这个key不存在的时候
- replace: 存储这个数据,当且仅当这个key存在
- append: 将数据存放在已存在的key对应的内容的后面,忽略exptime
- prepend: 将数据存放在已存在的key对应的内容的前面,忽略exptime
- 必选:是
- 描述: OCSWriter写入方式,具体为:
-
writeFormat
- 描述: OCSWriter写出数据格式,目前支持两类数据写入方式:
- text: 将源端数据序列化为文本格式,其中第一个字段作为OCS写入的KEY,后续所有字段序列化为STRING类型,使用用户指定的fieldDelimiter作为间隔符,将文本拼接为完整的字符串再写入OCS。
- binary: 将源端数据作为二进制直接写入,这类场景为未来做扩展使用,目前不支持。如果填写binary将会报错!
- 必选:否
- 默认值:text
- 描述: OCSWriter写出数据格式,目前支持两类数据写入方式:
-
expireTime
-
描述: OCS值缓存失效时间,目前MemCache支持两类过期时间,
- Unix时间(自1970.1.1开始到现在的秒数),该时间指定了到未来某个时刻数据失效。
- 相对当前时间的秒数,该时间指定了从现在开始多长时间后数据失效。 注意:如果过期时间的秒数大于606024*30(即30天),则服务端认为是Unix时间。
- 单位:秒
-
必选:否
-
默认值:0【0表示永久有效】
-
-
indexes
- 描述: 用数据的第几列当做ocs的key
- 必选:否
- 默认值:0
-
batchSize
- 描述:一次性批量提交的记录数大小,该值可以极大减少DataX与OCS的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成DataX运行进程OOM情况[memcached版本暂不支持批量写]。
- 必选:否
- 默认值:256
-
fieldDelimiter
- 描述:写入ocs的key和value分隔符。比如:key=tom\u0001boston, value=28\u0001lawer\u0001male\u0001married
- 必选:否
- 默认值:\u0001
CPU:16核、内存:24GB、网卡:单网卡1000mbps
-Xms8g -Xmx8g -XX:+HeapDumpOnOutOfMemoryError
单条数据大小 | 通道并发数 | TPS | 通道流量 | 出口流量 | 备注 |
---|---|---|---|---|---|
1KB | 1 | 579 tps | 583.31KB/s | 648.63KB/s | 无 |
1KB | 10 | 6006 tps | 5.87MB/s | 6.73MB/s | 无 |
1KB | 100 | 49916 tps | 48.56MB/s | 55.55MB/s | 无 |
10KB | 1 | 438 tps | 4.62MB/s | 5.07MB/s | 无 |
10KB | 10 | 4313 tps | 45.57MB/s | 49.51MB/s | 无 |
10KB | 100 | 10713 tps | 112.80MB/s | 123.01MB/s | 无 |
100KB | 1 | 275 tps | 26.09MB/s | 144.90KB/s | 无。数据冗余大,压缩比高。 |
100KB | 10 | 2492 tps | 236.33MB/s | 1.30MB/s | 无 |
100KB | 100 | 3187 tps | 302.17MB/s | 1.77MB/s | 无 |
- 单条数据小于10KB时建议开启100并发。
- 不建议10KB以上的数据写入ocs。