All Projects → luojilab → DataTransHub

luojilab / DataTransHub

Licence: MIT license
跨平台Android/iOS海量数据上报组件,基于Xlog完善,解决Xlog痛点问题。

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
CMake
9771 projects
java
68154 projects - #9 most used programming language
objective c
16641 projects - #2 most used programming language
Objective-C++
1391 projects
shell
77523 projects

Projects that are alternatives of or similar to DataTransHub

Xlog
Android logger, pretty, powerful and flexible, log to everywhere, save to file, all you want is here.
Stars: ✭ 2,468 (+2296.12%)
Mutual labels:  logger, xlog
seas-logger
An effective,fast,stable log package for PHP.
Stars: ✭ 46 (-55.34%)
Mutual labels:  logger
management tools
A collection of scripts and packages to simplify OS X management.
Stars: ✭ 93 (-9.71%)
Mutual labels:  logger
missionlog
🚀 lightweight logging • supports level based filtering and tagging • weighs in at around 500 bytes
Stars: ✭ 19 (-81.55%)
Mutual labels:  logger
forcelog
A structured, extensible logger for Salesforce Apex
Stars: ✭ 37 (-64.08%)
Mutual labels:  logger
PoShLog
🔩 PoShLog is PowerShell cross-platform logging module. It allows you to log structured event data into console, file and much more places easily. It's built upon great C# logging library Serilog - https://serilog.net/
Stars: ✭ 108 (+4.85%)
Mutual labels:  logger
jcabi-log
Static Wrapper of SLF4J easing you from the necessity to create static LOGGER instances in each Java class
Stars: ✭ 53 (-48.54%)
Mutual labels:  logger
papertrail-timber
Pluggable timber tree for Papertrail logging
Stars: ✭ 20 (-80.58%)
Mutual labels:  logger
Slack-logger-bot
Simple slack bot that can save all of your team messages on your server so that you can still read them even if you exceeds the 10,000 messages in the archive.
Stars: ✭ 47 (-54.37%)
Mutual labels:  logger
puts debuggerer
Ruby library for improved puts debugging, automatically displaying bonus useful information such as source line number and source code.
Stars: ✭ 82 (-20.39%)
Mutual labels:  logger
Flogs
An Advanced Logging Framework develop in flutter that provides quick & simple logging solution.
Stars: ✭ 158 (+53.4%)
Mutual labels:  logger
fancy-logs
Print fancy logs to the terminal
Stars: ✭ 14 (-86.41%)
Mutual labels:  logger
react-native-logger
Async aware logger for react-native with grouping and filter feature
Stars: ✭ 20 (-80.58%)
Mutual labels:  logger
rest-api-node-typescript
This is a simple REST API with node and express with typescript
Stars: ✭ 154 (+49.51%)
Mutual labels:  logger
ptkdev-logger
🦒 Beautiful Logger for Node.js: the best alternative to the console.log statement
Stars: ✭ 117 (+13.59%)
Mutual labels:  logger
Multiplatform-Log
Kotlin Multi Platform Logger, for android an ios : Logcat & print
Stars: ✭ 49 (-52.43%)
Mutual labels:  logger
handlers
Go's HTTP handlers I use in my projects
Stars: ✭ 53 (-48.54%)
Mutual labels:  logger
logger
All you need to log with Bref on AWS Lambda.
Stars: ✭ 30 (-70.87%)
Mutual labels:  logger
BLogger
An easy to use modern C++14/17 async cross-platform logger which supports custom formatting/patterns, colored output, Unicode, file logging, log rotation & more!
Stars: ✭ 23 (-77.67%)
Mutual labels:  logger
laravel-telegram-logging
Send logs to Telegram chat via Telegram bot
Stars: ✭ 95 (-7.77%)
Mutual labels:  logger

DataTransHub

name license platform

DataTransHub 是基于mmap的客户端海量数据上报组件,其中包括两个组件DataTransHub和Flog DataTransHub主要用于数据的上报,Flog主要用于log的上报。 实现客户端海量数据的高性能上报,上报过程不会block任何操作,实现高性能上报,基于腾讯Xlog的数据压缩和加密算法,实现数据的高压缩比压缩和加密存储。全新设计上报调度模块,策略调度完全由内部控制。

特点:

  1. 跨平台,DataTransHub是跨平台实现,适用于Android和iOS,多端代码统一,逻辑统一,避免逻辑不一致性。
  2. 海量数据存储和上报,采用实时压缩和加密,实现海量数据高效上报服务端。
  3. 多实例实现,不同业务采用不同实例,不同上报接口,完全解决腾讯Xlog单实例的弊端。
  4. 不丢数据,采用mmap实现缓冲区。即使发生应用crash或者进程被杀,数据不会丢失,下次启动会再次上报。
  5. 低功耗,采用c++实现,整个上报共用一个线程,多实例多业务场景共用同一线程,当数据全部上报完成后,线程休眠。
  6. 上报策略合理封装,通过参数设置,可以实现完全自主策略设置,满足不同业务需求
  7. 合理设置缓冲区大小和上报文件大小,可以提高网络利用率,减少上报次数以及网络链接次数。

原理

数据通过调用接口进入DataTransHub,先缓存到数据缓冲区,缓冲区实现是mmap,即使发生crash数据不丢失。当缓冲区数据量达到阈值,异步线程进行数据落盘,或者设置定期数据落盘。当时间达到上报时间点后,内部调度线程会调用外部实现接口,进行数据上传,上层上传成功或失败后通知底层,底层进行相应策略调整,根据策略决定下次触发文件上传时间,到达时间点后再次触发上传。

demo 的使用请参考这里

开始接入

接入 Android 或者 iOS

Android

aar接入

  1. 在项目跟目录build.gradle中加入 repositories { mavenCentral() }
  2. 在项目build.gradle中加入 implementation 'io.github.luojilab:datatranshub:1.2.8'
  3. 按照demo的调用方式接入

源码编译

准备条件:

  1. AndroidStudio3.1及以上版本
  2. android-ndk-r14b及以上版本

步骤:

  1. AndroidStuido打开源码路径project/android AndroidStuido项目文件
  2. 打开AndroidStudio中File菜单,Project Structure菜单
  3. 在Android NDK location中配置NDK位置
  4. 在AndroidStuido中的Gradle菜单中找到位于Android菜单下的datareporter,在Tasks中找到build,选择assembleRelease进行编译。
  5. 生成datatranshub-release.aar 导入到项目中进行使用

调用方式

/**
 * 创建DataTransHub实例
 *
 * @param cacheDir 缓存路径,必须全局唯一,不同业务不同路径
 * @param dataDir 数据存储路径,必须全局唯一,不同业务不同路径
 * @param encryptKey 缓存和数据加密的key,需要通过脚本生成
 * @return
 */
public synchronized static DataTransHub makeDataTransHub(String cacheDir, String dataDir, String encryptKey);

​ /** * 释放上报实例 * * @param dataTransHub 需要释放的实例 * @param releaseDataTransHub */ public synchronized static void releaseDataTransHub(DataTransHub dataTransHub);

/**
 * 设置数据文件上传实现方法
 *
 * @param uploadImp 文件上传的实现
 */
public synchronized void setUploadImp(IUploadImp uploadImp);

/**
 * 设置上传文件最大的尺寸,单位字节
 *
 * @param fileMaxSize    最大尺寸
 */
public synchronized void setFileMaxSize(long fileMaxSize);

 /**
 * 设置缓存buffer的大小,该大小不应该大于单文件最大尺寸,单位字节
 *
 * @param bufferSize   buffer的尺寸
 */
public synchronized void setBufferSize(long bufferSize);

/**
 * 设置文件上报的有效期,单位是秒,如果设置为0则所有数据都上报,不存在过期逻辑
 *
 * @param expiredTime 有效期
 */
public synchronized void setExpiredTime(long expiredTime);

/**
 * 设置上报间隔,防止上报过度频繁,影响网络。可设置间隔上报
 *
 * @param reportingInterval 上报间隔 单位毫秒
 */
public synchronized void setReportingInterval(long reportingInterval);


/**
 * 设置重试间隔,一次上报失败后,重试阶梯通过该方法设置,防止上报失败后马上进行重试,通过该参数设置重试阶梯
 *
 * @param retryInterval 单位毫秒
 */
public synchronized void setRetryInterval(long retryInterval);

/**
 * 设置数据文件前缀,用于方便过滤数据文件,可不传
 *
 * @param prefix         文件前缀
 */
public synchronized void setDataFilePrefix(String prefix);

/**
 * 设置上报策略,如果设置为UploadTriggerWayWayManual,则不会自动上报,需要手动触发上报
 *
 * @param uploadTriggerWay UploadTriggerWayWayAuto 或者 UploadTriggerWayWayManual
 */
public synchronized void setUploadTriggerWayWay(int uploadTriggerWay);

/**
 * 手动触发上传方法,如果策略设置为手动,则通过这个方法进行触发
 *
 * @param callback 上传成功后的回调
 */
public synchronized void manualTriggerUpload(IUploadCallback callback)

/**
 * 设置写入周期,多久数据落盘一次,0表示不进行周期落盘,完全依赖缓冲区阈值控制
 *
 * @param period 单位毫秒
 */
public synchronized void setWriteDiskPeriod(long period);

/**
 * 实例上报开始,设置完参数后调用该方法
 *
 */
public synchronized void start()

/**
 * 唤醒方法,当持续上报失败,会触发延长重试策略,当网络转好后,可以通过该方法马上触发再次上报
 *
 */
public synchronized void reaWaken()

/**
 * 真正的上报数据方法,通过该方法传入数据,然后大量数据存储磁盘成单文件
 *
 * @param data 字节数据
 */
public synchronized void push(byte[] data)

/**
 * 通知上传成功,当上传成功后调用该方法
 *
 * @param filePath 需要上传的文件路径
 */
public synchronized void notifyUploadSuccess(String filePath)

/**
 * 通知上传失败,当上传失败后调用该方法
 *
 * @param filePath 需要上传的文件路径
 */
public synchronized void notifyUploadFailed(String filePath)

/**
 * 上传文件的真正实现接口,需要上层实现该接口
 *
 * @param filePath 需要上传的文件路径
 */
public interface IUploadImp {
    void upload(String filePath);
}

混淆配置

-keep class com.iget.datatranshub.**{*;} -keep class com.iget.flog.**{*;}

iOS

库接入

  1. 拷贝release\iOS下对应架构的静态库文件导入到应用项目
  2. 参照下面的调用方式接入

源码编译

准备条件:

  1. xcode最新版本
  2. cmake最新版本

步骤:

  1. 使用终端进入项目中build/iOS目录
  2. 编译真机版本库执行 build_all.sh 执行后生成的Framwork在libs/all目录下
  3. 编译模拟器版本库执行 build_x86_64.sh 执行后生成的Framwork在libs/x86_64目录下
  4. 生成调试工程执行 generate_project.sh 执行后会生成调试的xcode工程,工程文件在build文件夹下

调用方式

/**
 * 创建DataTransHub实例
 *
 * @param cacheDir 缓存路径,必须全局唯一,不同业务不同路径
 * @param dataDir 数据存储路径,必须全局唯一,不同业务不同路径
 * @param encryptKey 缓存和数据加密的key,需要通过脚本生成
 * @return
 */
(instancetype)log_MakeLogCacheDir:(NSString *) cacheDir dataDir:(NSString *) dataDir encryptKey:(NSString *) encryptKey

​ /** * 释放上报实例 * */ (void)log_Destroy

/**
 * 设置数据文件上传实现方法
 *
 * @param callBack 文件上传的实现
 */
(void)log_SetUploadBlock:(void (^)(NSString *filePath)) callBack;

/**
 * 设置上传文件最大的尺寸,单位字节
 *
 * @param fileMaxSize    最大尺寸
 */
(void)log_SetFileMaxSize:(NSUInteger) fileSize

 /**
 * 设置缓存buffer的大小,该大小不应该大于单文件最大尺寸,单位字节
 *
 * @param bufferSize   buffer的尺寸
 */
(void)log_SetBufferSize:(NSUInteger) bufferSize

/**
 * 设置文件上报的有效期,单位是秒,如果设置为0则所有数据都上报,不存在过期逻辑
 *
 * @param expiredTime 有效期
 */
(void)log_SetExpiredTime:(NSTimeInterval) expiredTime

/**
 * 设置上报间隔,防止上报过度频繁,影响网络。可设置间隔上报
 *
 * @param reportingInterval 上报间隔 单位毫秒
 */
(void)log_SetReportingInterval:(NSTimeInterval) reportingInterval


/**
 * 设置重试间隔,一次上报失败后,重试阶梯通过该方法设置,防止上报失败后马上进行重试,通过该参数设置重试阶梯
 *
 * @param retryInterval 单位毫秒
 */
(void)log_SetRetryInterval:(NSTimeInterval) retryInterval

/**
 * 设置数据文件前缀,用于方便过滤数据文件,可不传
 *
 * @param prefix         文件前缀
 */
(void)log_SetDataFilePrefix:(NSString *) filePrefix

/**
 * 设置上报策略,如果设置为UploadTriggerWayWayManual,则不会自动上报,需要手动触发上报
 *
 * @param uploadTriggerWay UploadTriggerWayWayAuto 或者 UploadTriggerWayWayManual
 */
(void)log_SetUploadTriggerWayWay:(HubUploadTriggerWay) uploadTriggerWay

/**
 * 手动触发上传方法,如果策略设置为手动,则通过这个方法进行触发
 *
 * @param completionHandler 上传成功后的回调
 */
(void)log_ManualTriggerUploadCompletionHandler:(dispatch_block_t) completionHandler

/**
 * 设置写入周期,多久数据落盘一次,0表示不进行周期落盘,完全依赖缓冲区阈值控制
 *
 * @param period 单位毫秒
 */
(void)data_SetWriteDiskPeriod:(NSUInteger) period

/**
 * 实例上报开始,设置完参数后调用该方法
 *
 */
(void)log_Start

/**
 * 唤醒方法,当持续上报失败,会触发延长重试策略,当网络转好后,可以通过该方法马上触发再次上报
 *
 */
(void)log_ReaWaken

/**
 * 真正的上报数据方法,通过该方法传入数据,然后大量数据存储磁盘成单文件
 *
 * @param data 字节数据
 */
(void)data_PushData:(NSData *) data

/**
 * 通知上传成功,当上传成功后调用该方法
 *
 * @param filePath 需要上传的文件路径
 */
(void)log_NotifyUploadSuccess:(NSString *) filePath

/**
 * 通知上传失败,当上传失败后调用该方法
 *
 * @param filePath 需要上传的文件路径
 */
(void)log_NotifyUploadFailed:(NSString *) filePath

Support

还有其他问题?

  1. 参看 DataTranshHub/sample
  2. 阅读 源码
  3. 阅读 wiki
  4. 联系我们。得到电子书技术组 wx:hlj-lixiaoyu
  5. 开发成员: 跨平台、android:李晓宇 iOS对接层:由振北 go语言解密算法:刘思远

致谢:

感谢腾讯团队开源的MMKV项目。本项目借鉴了部分源码。 感谢开源。

License

DataTransHub 使用的 MIT 协议,详细请参考 LICENSE

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].