Thursday, August 12, 2021

V2EX - 技术

V2EX - 技术


大家 NAS 放在家里的哪里?

Posted: 12 Aug 2021 04:33 AM PDT

家里买了 NAS,但放在哪里一直困扰着我,放 NAS 的地方需要有电源接口、网线接口且因为噪音问题不能离床太近,家里符合这些条件的地方不多。
现在是放在书架上,但电源线和网线都是从书桌引到书架上面,不是很美观。
书桌比较小,放在书桌上会比较占空间。

js 小白请教下这个 sign 是怎么生成的

Posted: 12 Aug 2021 04:22 AM PDT

aHR0cHM6Ly93d3cuNTY3eXVucGFuLmNvbS9maWxlLTEyMzQ1ODcuaHRtbA==

有个 ajax 请求 load_down_addr10 这个 action,body 里的 sign 不知道哪里来的,源代码里没看到生成方式

或者有办法绕过这个 sign 吗?比如用模拟浏览器访问

只想要一个手机号码,有没有能以最低代价持有的方式?

Posted: 12 Aug 2021 04:03 AM PDT

以前一直都是一个号, 工作也好生活也好网友也好,全是在一个号上交流。 感觉这样下去确实不太行,故发此问。

人在魔都,还有一个担忧点就是,如果我办了一个归属地在魔都的号。
以后我去别的城市了,这号还方便操作么。
对手机号这块确实不太了解哈, 毕竟现在手上的都已经持有 N 年了。

react (react hooks 写法) + typescript + antd + vite2/webpack5 后台管理系统模板

Posted: 12 Aug 2021 04:03 AM PDT

最近在忙着后台系统的重构,写了个模板,欢迎使用,觉得不错可以 star 支持下,谢谢~~,有问题欢迎提交 issues 交流。

仓库地址

https://github.com/zenquan/react-admin-template.git

预览

预览地址

账号数据

  • 管理员 admin admin
  • 运营 zenquan zenquan

技术栈

react^17 + react-router-dom^4 + less + css modules + antd^4 + axios + mobx + echarts + react-i18next

开始

# git clone git clone https://github.com/zenquan/react-admin-template.git or git clone -b <branch> https://github.com/zenquan/react-admin-template.git  # install npm install  # start or dev master or master-i18n -> npm run start vite or vite-i18n -> npm run dev  

功能、组件的封装

  • 系统首页
  • 表格
    • 可编辑行表格
    • 拖拽排序表格
  • 图表
    • 折线图
    • 饼图
  • 组件
    • 富文本编辑器
    • Markdown
    • JSON 编辑器
  • Excel
    • 导出 excel
  • 404 页
  • 国际化

分支

  • webpack5: [ master 分支]
  • webpack5 国际化: [ master-i18n 分支]
  • vite: [ vite 分支]
  • vite 国际化: [ vite-i18 分支]

有没有办法对 Spring 进行"瘦身"?不去定制代码的前提下。

Posted: 12 Aug 2021 03:59 AM PDT

Spring 现在也是个庞然大物了,一个非常简单的 Api 跑起来背着一大坨依赖,内存占用几百 M 那都算是少的。我在网上找了找优化方案也没啥结果,Spring 内部基础功能太多导致它自身消耗很大,GraalVM 这东西看着很美,实际远没到可以使用的状态。

我甚至都起过吧 Spring 换掉的想法,但是 Spring 的 IOC 确实好用,而且其它家的这种框架,也没找到一个公认的经过工业环境考验的东西。

感觉 Spring 在 Java 的世界不说对手了,连第二名都找不到

深夜 NAS 哔哔响,拿出 iPad 登不进去,艰难起床按 Reset,群晖支援狂甩锅。

Posted: 12 Aug 2021 03:57 AM PDT

昨晚凌晨五点被 NAS 的哔哔警告声吵醒,拿出 iPad 打算把它关了 明天再说,然后发现特么在输入密码那个地方一直转圈圈,最后只能捅 reset,弄得我一晚都清醒了。

先发配置吧
DS920+
1-3 号盘位 3 块 4tb 酷狼 为 Storage Pool 1
4 号盘位 1tb 做备份 为 Storage Pool 2
内存作死加了一条 16G

警告声响是因为 4 号盘挂了。
发现登陆不去然后只能长按电源键正常关机(并非死机,是能自己闪蓝灯正常走完关机流程的,睡得迷迷糊糊,大约等关机等了几分钟吧)

然后把四号盘拔出重新开机,开机后发现登陆是没问题了,但是一直卡在 2FA 老是说我验证码错误,2FA 我相信此前是一直工作正常的,晚上也进去过 NAS,然后点击遗失手机 选项就提示"系统错误,请联系系统管理员"。

然后试了几次没办法登陆,而且还在哔哔响怕吵到家人而且赶着睡觉,就赶紧捅 reset 孔重置密码了。
PS:重置完真的吐了一口老血。。Photos 里面我这个账号的两万多张照片全部要重新索引。。DS video 也要重新索引,vmm 的虚拟机也要重新导入。。。目测只有 transmission 没受影响,其他账号暂未发现异样。

早上发了张工单给群晖。。内容跟上面的差不多吧。。就语气客气点。

然后他们倒是挺快回复了啊.

以下是他们的回复
-----------------------------------------------------------------------------------------------------------------------------------------------
有了解到您的情况,工程师根据您的描述进行了测试,并没有发现此问题。

由于 secure signin 服务是安装在系统分区的,所以普通的存储空间损毁理应不会影响到这个套件服务。

目前根据您所提供的日志来看,发现您的存储空间损毁是由于您将三块硬盘拔出,然后重新添加存储空间 1 之中的。

并且有发现您的内存有添加到了 20GB,而 920+所支持的最大内存是 8GB ( 1 )

由于内存出现问题可能造成各种不可估计的问题发生,不排除此次的问题也和内存超量有关,烦请您移除额外添加的第三方内存,使用 DS920+的原厂和兼容内存,然后继续使用查看是否还有此问题的出现。
-----------------------------------------------------------------------------------------------------------------------------------------------

好吧,你说我内存问题我就认了,但前面两个回答是怎么回事???

群晖回答 1.由于 secure signin 服务是安装在系统分区的,所以普通的存储空间损毁理应不会影响到这个套件服务。

这我 tm 当然知道啊,现在就是出问题了才叫你们看看,你直接跟我说 应不影响???? wtf ??????

群辉回答 2.目前根据您所提供的日志来看,发现您的存储空间损毁是由于您将三块硬盘拔出,然后重新添加存储空间 1 之中的。

这个 tm 的明显就是没认真看 Log 的,因为我之前是用 218 升级到现在 920 的,所以硬盘 3 号此前是放了一个 sata ssd 进去试试能不能做缓存,然后前天新买的酷狼到了就把 ssd 拔出来,放酷狼进去扩展 Storage Pool 1 的,而真正损坏的是四号盘 单盘的 Storage Pool 2 。

我又不是追究群晖什么责任,反正数据没丢,储存池 2 也仅为备份,且还有离线备份,而我仅仅是希望汇报 Bug 帮助避免将来还有相同情况发生而已。。。群辉这种服务态度实在实在令人非常失望。

安卓 12 Public Beta 4 下代理不能使用

Posted: 12 Aug 2021 03:46 AM PDT

issuetracker :issuetracker.google.com/issues/196271165
安卓 12 beta 的官网:https://developer.android.com/about/versions/12/overview?hl=zh-cn

具体的表现是应用本身可以连接网络,但是不能给其他应用进行加速,说法是这次更新里相关的接口出现了问题

官方的态度是"确认问题的存在,但是因为内部更为新的版本已经解决了所以请期待下次更新(虽然没说是 beta5 还是正式版,不过估计是前者)"

虽然说是平台稳定性里程碑结果不但 UI Bug 没有修( pixel 启动器中那个方形的谷歌搜索栏),甚至还引入了这么严重的问题,确实是非常无语了

C 语言里面的 inline 关键字到底是啥意思?

Posted: 12 Aug 2021 03:44 AM PDT

起因是我突然发现用 GCC 不带任何编译选项来编译下面的 C 代码,会报错:

#include <stdio.h>  inline void func() {         printf("Hello world!\n"); }  int main() {         func();         return 0; } 

错误输出:

/usr/bin/ld: /tmp/ccdw5O1b.o: in function `main': test.c:(.text+0xe): undefined reference to `func' collect2: error: ld returned 1 exit status 

但是,用 G++ 不带任何编译选项编译下面的 C++ 代码,正常运行:

#include <iostream>  using namespace std;  inline void func() {         cout << "Hello world!" << endl; }  int main() {         func();         return 0; } 

我把 C 代码中的 func 加上 static 修饰符,可以正常编译:

#include <stdio.h>  static inline void func() {         printf("Hello world!\n"); }  int main() {         func();         return 0; } 

用 inline 声明 func 也可以正常编译:

#include <stdio.h>  inline void func();  void func() {         printf("Hello world!\n"); }  int main() {         func();         return 0; } 

编译的时候加上 -O2 选项也能正常编译。

我查了很多的博客,包括 C11 的标准文件,但是迫于理解能力,还是没能搞懂为啥会这样,所以在此请教一下大家。

附上我查的资料链接:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

https://stackoverflow.com/questions/19068705/undefined-reference-when-calling-inline-function

https://stackoverflow.com/questions/16245521/c99-inline-function-in-c-file/16245669#16245669

https://stackoverflow.com/questions/7762731/whats-the-difference-between-static-and-static-inline-function

https://runtimeverification.com/blog/undefined-c-common-mistakes/

MIUI 最近那个原子内存是什么原理?

Posted: 12 Aug 2021 03:43 AM PDT

最近雷布斯的演讲有点意思,不过我更好奇那个 12.5 增强版(其实就是超级 Bug 修复版)里提到的原子内存,我看介绍大概是可以回收各个应用进程内部的局部内存,这样可以使得可用内存更多,后台被杀的概率降低。

但是这个回收局部内存是咋做到的?比我我在微信聊天,但是支付暂时用不到,可以回收,系统如何判定的?

想在内网做一个 Web 工具入口 Portal 页面,有什么比较好的推荐?

Posted: 12 Aug 2021 03:25 AM PDT

内网部署了一些在线的服务和工具,想把对应的 Web 链接地址集中弄个 Portal 作为入口,这样方便管理,大家也不用一个个记。

目前觉得下面这个风格比较合适,各位有什么比较合适的前端模板 /图标资源推荐一下?

彭于晏们 , 我来套一个数据库的选型方案

Posted: 12 Aug 2021 03:20 AM PDT

我想把现有 ERP 系统的查询功能进行优化

目前的情况是有 4 张主表, 每张表大概有 1500w 条数据 ,每天大概增加 3w 条数据, 每张表都有 100 多个字段,其中不乏有 varchar(200)这种字符串.

查询时 4 张表还会进行 join,算上其他表总的关联表大概有 10 张左右.并且查询条件也比较多变,聚合索引难以覆盖所有场景,但一般会基于一个时间段再搭配其他三四个灵活的字段进行查询.

目前的想法是把这几张表的数据进行聚合,筛选出比较重要的字段(大概有 70 个)单独存放到一个数据库中 , 以下是我的一些需求

  • 首要的是查询效率高,能满足多变的组合查询条件
  • 不是冷数据,有低频更新的需求 每秒三十次左右
  • 格式较为固定 , 很少添加或者修改字段
  • 由于已经是聚合后的数据所以不需要 join 操作
  • 无事务要求
  • 基本上只做即时查询 ,没有对数据进行二次挖掘和处理

目前是把数据放到了 MongoDB ,加上索引后大概占了 20GB 左右,查询效率一般, 所以想知道对于我这种场景有没有比 MongoDB 更合适的数据库, PostgreSQL ClickHouse Cassandra ?

GitHub 增加了 github1s 这样的功能

Posted: 12 Aug 2021 03:13 AM PDT

有博客需求的可以看下这个项目 可以直接部署用 技术栈 ts+next+express

Posted: 12 Aug 2021 02:45 AM PDT

项目地址 https://github.com/MrWangJustToDo/ts-next-blog

包含有完整的后端逻辑 数据库使用 sqlite

admin 账号 mrwang 密码 099647

如果有查询数组中元素的需求,是不是应该尽早切换到 MongoDB?

Posted: 12 Aug 2021 02:19 AM PDT

最近正在用 Golang 写一个商品管理系统,现在已经用上了 MySQL 和 Redis,现在有一个需求,就是商品对某些用户的等级不可见。

例:某商品的可见 VIP 等级为 [2,3],即该商品只对 VIP2 和 3 等级的用户组开放购买申请。

我初步搜索了一下,好像 MySQL 对数组元素的查询是比较麻烦的,鉴于这个查询比较频繁,且项目还在早期开发阶段,是不是应该尽早进入 MongoDB?

git 仓库太大(文档库, 30g+)mbp 硬盘不太够了,有啥办法能让它体积变小一点?

Posted: 12 Aug 2021 02:00 AM PDT

我需要拉取最新的提交,又需要修改做推送。 我尝试过指定 depth 或者使用 iCloud 来解决,但都以不完美告终

不用谢,金九银十 不准备, 十一十二 徒伤悲 ,高频面试题给你全划重点了,点赞收藏

Posted: 12 Aug 2021 01:51 AM PDT

持续更新的 Github

Vue 系列

Vue3 系列

ES6 系列

Javascript 系列

CSS 系列

webpack 系列

HTTP 系列

NodeJS 系列

React 系列

GitHub 的 Codespaces 的实际付费体验如何?

Posted: 12 Aug 2021 01:49 AM PDT

今天 GitHub 出了一个新功能,并且对 github.dev 域名作出了解释:

Press . on any repo to make quick edits powered by Visual Studio Code.

然后又勾起了我对 Codespaces 开发实际体验的向往,

所以说

GitHub 的 Codespaces 的实际付费体验如何?

看了下付费价格,最基础的付费价格比网吧上网便宜,但是目前貌似没对个人用户开放?

目前来看对我来说最有用的莫过于云端开发环境的统一,移动办公随时可行.

(周末回老家,有时候想 coding 不用再用老家的台式同步代码和配置环境了)

有用过的 V 友说一下吗?

GitHub PR review 选中多行的功能不能用了?

Posted: 12 Aug 2021 12:41 AM PDT

之前可以选中多行后添加评论,现在尝试选中多行但根本不高亮了,不知道这个功能坏掉了还是浏览器兼容问题。浏览器用的是 Chrome 92.0.4515.131 。

[C#外包] 用 C#写一个 GUI 数据处理工具, 限深圳(需求之前发帖讨论过的)

Posted: 12 Aug 2021 12:19 AM PDT

  1. 有旧版本的软件可以参考(改动小), 需求明确. (我自己是 Golang 开发)
  2. 初略需求参考帖子 /t/633910, 数据量 y 的点数改成 1w~10w.
  3. 为了方便交流, 限深圳吧

联系方式, 微信扫码:

image.png

有没有这样的程序

Posted: 11 Aug 2021 11:38 PM PDT

在 vps 上 接收远端主机来的网站访问请求,然后发给目的地网站,返回来的数据再传给远端主机,这样就相当于做了一个代理。好处是这个 vps 是我私有的,而且本地主机不用任何设置。
这个是不是就是反向代理的原理。不懂。不知到 github 上有没有这样的程序。这个用 java 后端写一个应该不难的吧,还是 nginx 就有这样的功能呢?

如何通过技术赚 ¥1/$1

Posted: 11 Aug 2021 10:04 PM PDT

以工作坊的形式梳理如何通过技术赚 ¥1/$1 。

视频地址: https://youtu.be/K31U_oWepPY

美团更新绕过了 Google Play

Posted: 11 Aug 2021 10:01 PM PDT

Android 开发者学习路线怎么走?

Posted: 11 Aug 2021 09:06 PM PDT

才入行,对未来一两年的学习方向比较迷茫,希望各位朋友指点一二,不胜感激!

怎么才能高效地将长话单拆分成按小时分解的多条短话单?

Posted: 11 Aug 2021 08:54 PM PDT

原始话单是这样的:

USERID STARTTIME ENDTIME SERVICETYPE CHANNELCODE PROGRAMNAME
xxxxxxxxxxxxxxxxx1 2021-05-24 19:52:28 2021-05-24 23:56:27 1 精灵宝可梦

老板让分析每个用户各个时段都在看啥,所以我想吧话单拆分成这样:

USERID STARTTIME ENDTIME SERVICETYPE CHANNELCODE PROGRAMNAME PERIODTIME
xxxxxxxxxxxxxxxxx1 2021-05-24 19:52:28 2021-05-24 20:00:00 1 精灵宝可梦 2021-05-24 19:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 20:00:00 2021-05-24 21:00:00 1 精灵宝可梦 2021-05-24 20:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 21:00:00 2021-05-24 22:00:00 1 精灵宝可梦 2021-05-24 21:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 22:00:00 2021-05-24 23:00:00 1 精灵宝可梦 2021-05-24 22:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 23:00:00 2021-05-24 23:56:27 1 精灵宝可梦 2021-05-24 23:00:00

目前的方法是根据起止时间生成时间序列,然后 for 循环生成新的行,再拼接成一个新的 dataframe

# split_data ... for i in range(0, len_date-1):     df_y['Period'] = date_rng[i]     df_y['EndTime'] = date_rng[i+1]     df_y['StartHour'] = date_rng[i]     df_y['EndHour'] = date_rng[i+1]     df_x = df_x.append(df_y) ... 

主函数还要写个 for 循环遍历整个话单

for i in range(len(df_tmp)):     df_x = split_data(df_tmp.iloc[i])     df_t = df_t.append(df_x) df_t 

这样能获得想要的结果,但话单太多了,跑起来没完没了……

有没有更好的方法能提高下效率?

vue2 的 script 标签版本 js 文件被 edge 浏览器识别为可能损害你的计算机

Posted: 11 Aug 2021 06:51 PM PDT

这个页面的开发版本和生产版本两个按钮下载的文件全部报毒

好奇这是什么原理 难道是钓鱼网站用了 vue ?

Microsoft Edge Version 92.0.902.67 (Official build) (64-bit)

华为市场上架,多次被拒都是说 App 无法启动(闪退),但各种测试都没办法复现闪退问题,华为没有给更多的有效信息……

Posted: 11 Aug 2021 04:32 PM PDT

已经尝试的操作:

  • 本地的好几部华为手机上反复尝试,无闪退
  • 之前给一些用户试用,无闪退
  • 华为提供的云真机服务,无闪退
  • App 有接入 Sentry,也没有收到任何报错信息
  • 其他几个应用市场审核时也没有说遇到闪退

问客服要要 stack trace 、logcat 之类,但客服只给了一张截图,截图内容就是纯粹的手机的桌面,标注着点了一下 App 按钮。然而这似乎并没有什么有效信息用来调试……

请教各位大佬,应该怎么处理?

有人遇到过 predis 的密码特殊符号问题吗 ?

Posted: 11 Aug 2021 10:51 AM PDT

今天遇到一个密码包含 @ 的 reids,用 https://github.com/predis/predis 死活连不上,看了下包代码感觉是这个包没处理这种情况,有遇到过的朋友吗?希望不吝赐教


别和我说百度查,我已经折腾了很久了。。。。

请问什么叫做“组间广播”?

Posted: 11 Aug 2021 09:59 AM PDT

来自于美团技术文档:

当然,对于互联网的大部分应用来说,组间广播、组内单播是最常见的情形。 消息需要通知到多个业务集群,而一个业务集群内有很多台机器,只要一台机器消费这个消息就可以了。 当然这不是绝对的,很多时候组内的广播也是有适用场景的,如本地缓存的更新等等。所以,一般比较通用的设计是支持组间广播,不同的组注册不同的订阅。组内的不同机器,如果注册一个相同的 ID,则单播;如果注册不同的 ID(如 IP 地址+端口),则广播。https://tech.meituan.com/2016/07/01/mq-design.html 

这里的组间广播是什么意思?我 Google 了好久,搜索结果都是单播多播广播的区别,没有提到组间广播,根据感觉好像指的是订阅发布模型,但是我没法将订阅发布模型与组间广播结合起来。 请各位指教。谢谢各位了!

吐槽自己的两个开源工具(msmbps, V File Name)

Posted: 11 Aug 2021 07:35 AM PDT

msmbps 测量云服务的延时和下载,V File Name 是粗暴的基于压缩包的版本管理。

刚开始的时候,想着国外云服务是小众需求;而粗暴的版本管理,倒腾 office 文档的普罗大众都需要(它也是个归档备份的好助手)。

后面就翻车了:测量云服务很多 star,开心呀;粗暴版本管理,star 就比较少了。

我看了一下,然后明白了:v2ex 程序员很多,不少人需要国外云服务;对于粗暴的版本管理,需求较少。

小广告:
https://www.msmbps.com/
https://github.com/msmbps/msmbps
https://www.vfilename.com/
https://github.com/vfilename/vfilename
(求 star 啦)

求在 windows 下有没有更好的远程开发方案,被 wsl2 的 bug 折腾疯了

Posted: 11 Aug 2021 07:33 AM PDT

wsl2 不定时地连不上外网,重启才可以,这个实在是太致命了,之前是几天一次,现在是几乎天天会,还不止一次

也跟官方提交了反馈信息,github issue 也找到不少类似的情况,但都解决不了

只能寻找另外的解决方案了,装虚拟机的方案好像大多人是把 IDE 也装在虚拟机里吧,有没有可以不装图形界面的方案,毕竟 ide 等放 windows 里还是比较方便

大佬们能不能推荐一下 chrome,书签分类好用的工具

Posted: 11 Aug 2021 07:19 AM PDT

求求了,我现在 3000 多个书签。。。。难受呀

OpenHarmony 几乎 fork 了大部分第三方常用库并移植到 HMOS

Posted: 11 Aug 2021 07:15 AM PDT

https://gitee.com/organizations/openharmony-tpc/projects

粗略看了下,
-大部分的 Android API 和控件都接近"无缝"切换到了 HM API;
-连这些第三方库都刻意在源码中去掉了 Android 相关字段
https://gitee.com/openharmony-tpc/lottie-ohos/commit/f668cd2dd811ced5e882e4c69df78275937edb32

不懂就问, 这样直接 fork 修改之后"去掉原项目相关的一切信息", 是否违反了开源协议
(如常见的 apache v2, 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明)

阿里云 ECS,桌面多了一个证书文件,创建时间和上次重启时间一致。

Posted: 11 Aug 2021 07:02 AM PDT

系统只安装有 Plesk,未安装任何其他软件。难道是东家搞的?

请问天翼网管怎么限制设备网速啊

Posted: 11 Aug 2021 06:11 AM PDT

请教 Java (kotlin)的 glob,玩不转了…两个*的好使,一个*的通通匹配不到…

Posted: 11 Aug 2021 06:05 AM PDT

直接上代码吧,直接扒的网上的代码

fun globMatch(glob: String, location: String) : ArrayList<String>{     val fileList = arrayListOf<String>()     fileList.clear()     val pathMatcher: PathMatcher = FileSystems.getDefault().getPathMatcher(glob)     Files.walkFileTree(Paths.get(location), object : SimpleFileVisitor<Path>() {         override fun visitFile(             path: Path,             attrs: BasicFileAttributes         ): FileVisitResult {             println("${path}:${pathMatcher.matches(path)}")             if (pathMatcher.matches(path)) {                 fileList.add(path.toString())             }             return FileVisitResult.CONTINUE         }          @Throws(IOException::class)         override fun visitFileFailed(file: Path, exc: IOException): FileVisitResult {             return FileVisitResult.CONTINUE         }     })     println(fileList)     return fileList }  fun main(args : Array<String>) {     globMatch(args[1],args[0]) } 

运行的结果,当我对 glob 传入**的时候,可以匹配出我想要的,但是会把下层目录的文件也匹配到,当我使用一个*的时候,却完全匹配不到了…结果例如:

[kettle@localhost trans]$ ls -rlt 总用量 88 -rw-rw-r--. 1 kettle kettle 65816 8 月  10 15:42 telnet-0.17-65.el7_8.x86_64.rpm drwxrwxr-x. 2 kettle kettle  4096 8 月  11 19:47 content -rw-rw-r--. 1 kettle kettle     0 8 月  11 19:47 test.jar  [kettle@localhost trans]$ java -jar content/superFastCompress-1.0.jar '/test/trans' 'glob:**.jar' /test/trans/telnet-0.17-65.el7_8.x86_64.rpm:false /test/trans/content/mysql-connector-java-5.1.48-bin.jar:true /test/trans/content/postgresql-42.2.23.jar:true /test/trans/content/mysql-connector-java-5.1.48.jar:true /test/trans/content/ojdbc6.jar:true /test/trans/content/superFastCompress-1.0.jar:true /test/trans/content/TunnelX-1.0-SNAPSHOT.jar:true /test/trans/test.jar:true [/test/trans/content/mysql-connector-java-5.1.48-bin.jar, /test/trans/content/postgresql-42.2.23.jar, /test/trans/content/mysql-connector-java-5.1.48.jar, /test/trans/content/ojdbc6.jar,  /test/trans/content/superFastCompress-1.0.jar, /test/trans/content/TunnelX-1.0-SNAPSHOT.jar, /test/trans/test.jar] 这里就是把我想要的,不想要的都整出来了…我只想要一个 test.jar  [kettle@localhost trans]$ java -jar content/superFastCompress-1.0.jar '/test/trans' 'glob:*.jar' /test/trans/telnet-0.17-65.el7_8.x86_64.rpm:false /test/trans/content/mysql-connector-java-5.1.48-bin.jar:false /test/trans/content/postgresql-42.2.23.jar:false /test/trans/content/mysql-connector-java-5.1.48.jar:false /test/trans/content/ojdbc6.jar:false /test/trans/content/superFastCompress-1.0.jar:false /test/trans/content/TunnelX-1.0-SNAPSHOT.jar:false /test/trans/test.jar:false [] 这里就是啥都没有了…按我想的,本来应该匹配到一个 test.jar 的… 

请大家指教,我想用一个*匹配到底应该咋搞 o(╥﹏╥)o

golang elasticsearch 搜索封装

Posted: 11 Aug 2021 05:53 AM PDT

#日志系统说明

  • 先来传送门:

代码传送门

  • 1 、日志主要说明:谁在什么时间,在什么地方,做了什么事情,产生了什么影响,影响的变化因子。

  • 2 、日志系统主要建设在 oplogger 基础上。将现有的 mysql 存储方式改成 elasticsearch 的存储方式。并且更新了现有字段,使其更优化

  • 3 、以下为主要设计原理图:

说明:

  1. trace_id: 用来追踪一个请求的全服务调用流向
  2. 应用 /服务的唯一标识: 用来确定日志产生的应用服务器的唯一标识(可以细分)
  3. 业务项的唯一标识: 用来确定逻辑段的唯一标识,如 orderid,sku,stokin_code 等
  4. 时间序列表: 用来记录日志的变化时间序,及日志创建的时间点
  5. 事件序列、描述: 具体描述一件事情;如打包调试信息,封箱错误信息,拆包裹业务信息
  6. 变化值序列: 描述事件内部的不同变化值
  7. 备注: 用于一些说明
  8. 预留字段: 用来扩展日志系统业务能力
  9. caller: 日志产生的当前文件名及行号等信息
  10. user_id,user_name:添加操作人记录

6 、golang elasticsearch 查询封装:

  • 初始化
import ( 	"github.com/xxjwxc/esLog/view/es" )  func main(){ 	client,_ := New(WithIndexName("test_log"), WithAddrs("http://192.168.198.17:9200/")) 	//精确搜索 	term := make(map[string]interface{}) 	term["topic"] = "topic" 	term["etype"] = oplogger.EOpType_EOpGunbuster 	term["user_name"] = "username" 	term["ekey"] = "iddd-1" 	term["elevel"] = oplogger.ELogLevel_EOperate 	//模糊匹配 	match := make(map[string]interface{}) 	match["desc"] = "desc" 	match["attach"] = "attach"  	// 时间范围 	timeCase := make(map[string]CaseSection) 	timeCase["creat_time"] = CaseSection{ 		Min: time.Now().AddDate(0, 0, -1), 		Max: time.Now(), 	}  	//构造搜索器 	var que EsQuery 	que.OnPages(0, 10).OnTerm(term).OnMatch(match).OnRangeTime(timeCase)  	// 打印查询字符串  	data1, _ := json.Marshal(que.OnSource()) 	fmt.Println(string(data1))  	// 查询结果 	client, _ := New(WithIndexName(Index), WithAddrs(url)) 	var eslog []ESLog 	client.WithOption(WithIndexName(Index), WithTypeName(Index)).Search(que.OnSource(), func(e []byte) error { 		var tmp ESLog 		json.Unmarshal(e, &tmp) 		eslog = append(eslog, tmp) 		return nil 	})  	fmt.Println(eslog)// 答应结果 } 

6 、逻辑及代码调用说明:

日志写入调用:

//批量添加 client.BulkAdd(list) 

日志写入调用:

//批量添加 client.Add(info) 

日志搜索:

 //精确搜索 term := make(map[string]interface{}) ... //模糊匹配 match := make(map[string]interface{}) ... //时间段搜索 timeCase := make(map[string]es.CaseSection) ...   // tools 搜索 eslist := tools.Search(term, match, timeCase, req.Page, req.Limit)  

说明:以接口解耦,具体业务根据不同需求实现接口实现。主要用来对数据分流。

传送门

设计思想

完了,完了,今天写了一天的代码都没有,该死的 GitHub.dev

Posted: 11 Aug 2021 05:04 AM PDT

今天早上看到有人发 GitHub 新知识就试试

感觉还不错,然后就开始在线写代码了

不断的 ctrl + c ctrl +v ,快下班于是就想想划划水。

然后就开始一个不小心把我浏览器关了,当时我还不知道

划完水想提交代码下班,结果全没有了。。。。。

😭😭😭😭😭

No comments:

Post a Comment