#bbs
2021-03-01
whitefloor
15:39:42
文件中的router,正要問的時候就突然看到,給各位參考
/v1/users/{{user_id}}/articles
/v1/users/{{user_id}}/articles
Amos Chang
21:21:13
and repository.BBSPopularArticleRecord since go-bbs has not implemented it yet *:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/86|#86> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/50|#50> *:pick: 變更內容 / Details of Changes* • add `BBSPopularArticleRecord` to mock `bbs.PopularArticleRecord` since go-bbs has not implemented it yet • add `GetPopularArticles()` to interface `Repository`
Amos Chang
22:27:22
等等,雖然我看 #107 沒有 assignee,所以開口要了這個 issue
然後再看母 issue 的時候赫然發現,開 issue 的 linmechu 本人說他想要寫看看 delivery/http:
https://github.com/Ptt-official-app/Ptt-backend/issues/50#issuecomment-780408877
然後再看母 issue 的時候赫然發現,開 issue 的 linmechu 本人說他想要寫看看 delivery/http:
https://github.com/Ptt-official-app/Ptt-backend/issues/50#issuecomment-780408877
- 😮1
MCLin
2021-03-02 11:15:49
啊
Amos Chang
2021-03-02 11:16:52
啊抱歉我錯頻了…
Amos Chang
2021-03-02 11:20:04
本來是要pm @pichuchen 的,
那你有要做這個沒錯吧?
那就還給你囉?
那你有要做這個沒錯吧?
那就還給你囉?
MCLin
2021-03-02 11:27:53
好喔!!
MCLin
2021-03-02 11:27:59
感恩
pichuchen
2021-03-02 11:44:51
我把#107 Assignment 過去了
MCLin
2021-03-02 11:45:04
🙏
Amos Chang
22:28:40
如果不小心搶了他的 issue 可以還給他
2021-03-02
j31422210
02:31:09
@j31422210 has joined the channel
kuo-chuan weng
11:06:43
我可以幫忙 我會去issue 底下留言
MCLin
11:15:49
啊
Amos Chang
11:16:52
啊抱歉我錯頻了…
Amos Chang
11:20:04
本來是要pm @pichuchen 的,
那你有要做這個沒錯吧?
那就還給你囉?
那你有要做這個沒錯吧?
那就還給你囉?
MCLin
11:27:53
好喔!!
MCLin
11:27:59
感恩
陳昱廷
11:38:34
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/88|#88> *:pick: 變更內容 / Details of Changes* 1. 增加了 1.16 的 ci 測試 2. 將上個星期的 development 的 code 合併進 development _enalbe_lint 3. 移除空白跟 id to ID
陳昱廷
11:38:58
把上個星期的的合併進去
pichuchen
11:44:51
我把#107 Assignment 過去了
MCLin
11:45:04
🙏
whitefloor
14:16:06
好der 感謝
陳昱廷
15:32:06
development to development_enable_lint 單向同步好了
陳昱廷
15:32:18
有空可以重拉
陳昱廷
15:32:35
然後現在有一個 issue 需要有人幫忙
陳昱廷
15:32:40
*實作細節 / Details of Implement* internal\delivery\http\route_users.go:76 - getUserFavorites 此 route 尚未實作測試 *期程 / Schedule* • 討論時間:一天 • 實作時間:三天 • 確認時間:一天 *相關文件 / Documents* 可參考 <https://github.com/Ptt-official-app/Ptt-backend/issues/45|#45> *備註* 開發前請先參考 FOR_TEST_DEVELOPERS.md 裡的說明
陳昱廷
15:33:56
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/110|#110> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/109|#109> *:pick: 變更內容 / Details of Changes* 增加 route_users 相關的註解
陳昱廷
15:34:01
這個 pr 則是需要討論
pichuchen
2021-03-02 19:09:05
go docs 好像有關於註解的範例,基本上 golang 註解沒有 i18n 因此我對於要使用中文還是英文註解有點困擾,最後我的結論是使用英文註解,但是要確保註解內容直接丟到 Google 翻譯上轉成中文是通順的。
pichuchen
2021-03-02 19:09:55
通常第一個字會是這個 method 或是 class 的名稱
pichuchen
2021-03-02 19:10:23
然後描述每個參數的用途以及回傳的資訊
pichuchen
2021-03-02 19:11:20
pichuchen
2021-03-02 19:11:36
然後 Testcase 的註解不一定要是這種格式
pichuchen
2021-03-02 19:12:21
pichuchen
19:06:37
這週的影片連結發出了,然後和大家提醒一下,我們有個每週的影片和問卷,如果不知道我在講什麼的請私訊我然後告訴我你的 email
pichuchen
19:09:05
go docs 好像有關於註解的範例,基本上 golang 註解沒有 i18n 因此我對於要使用中文還是英文註解有點困擾,最後我的結論是使用英文註解,但是要確保註解內容直接丟到 Google 翻譯上轉成中文是通順的。
pichuchen
19:09:35
pichuchen
19:09:55
通常第一個字會是這個 method 或是 class 的名稱
pichuchen
19:10:23
然後描述每個參數的用途以及回傳的資訊
pichuchen
19:11:20
pichuchen
19:11:36
然後 Testcase 的註解不一定要是這種格式
pichuchen
19:12:21
MCLin
20:52:55
*:clap: 解決掉的 issue / Resolved Issues* • closed <https://github.com/Ptt-official-app/Ptt-backend/issues/107|#107> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/83|#83> • <https://github.com/Ptt-official-app/Ptt-backend/issues/86|#86> *:pick: 變更內容 / Details of Changes* • 實作熱門文章的 http 套件
MCLin
2021-03-02 20:53:27
@gn01842919
要幫忙 review 一下嗎 哈哈哈哈哈
要幫忙 review 一下嗎 哈哈哈哈哈
Amos Chang
2021-03-02 21:15:30
MCLin
2021-03-02 21:28:40
賀
!
!
MCLin
20:53:27
@gn01842919
要幫忙 review 一下嗎 哈哈哈哈哈
要幫忙 review 一下嗎 哈哈哈哈哈
Amos Chang
21:15:30
MCLin
21:28:40
賀
!
!
2021-03-03
whitefloor
12:27:59
我整理一下現在的進度
whitefloor
12:31:03
1. ptt-backend的repository需要go-bbs解析,但go-bbs尚未實作
2. 決定與go-bbs一起實作,這樣在ptt-backend就不需要做mock
3. 在go-bbs實作時需要開issue
4. ptt-backend串接go-bbs時需要在go.mod增加版本號碼0.2.5 > 0.2.6
2. 決定與go-bbs一起實作,這樣在ptt-backend就不需要做mock
3. 在go-bbs實作時需要開issue
4. ptt-backend串接go-bbs時需要在go.mod增加版本號碼0.2.5 > 0.2.6
whitefloor
22:30:14
@xboxa5105
whitefloor
22:30:18
issue開好了
whitefloor
22:41:58
可能要請你過去留個言pichu才能assign給你 我沒權限
whitefloor
22:42:03
如果有問題再跟我說~
whitefloor
22:46:55
hi~可以請問https://github.com/Ptt-official-app/go-bbs/issues/59 有文件或是類似的段落可以參考嗎
- 👀1
pichuchen
2021-03-04 19:47:36
這個好像沒寫清楚是 http 還是 usecase的
whitefloor
2021-03-04 19:48:19
好的 我改一下
whitefloor
2021-03-04 19:52:05
是針對repository的
pichuchen
2021-03-04 20:02:21
等等,兩個 issue 剛好同個 ID ...
pichuchen
2021-03-04 20:05:19
go-bbs 應該不用處理歷史文章? 應該是交由 Ptt-backend 的 usecase去處理?
whitefloor
2021-03-04 20:39:36
我看一下有沒有query
whitefloor
2021-03-04 20:47:29
我有看到GetBoardArticleRecords
whitefloor
2021-03-04 20:48:06
我是想直接撈到userID的所有文章,還是說在這之前要先用看板分類?
pichuchen
2021-03-04 20:50:50
因為目前 PTT 的資料庫並沒有存某個 userID 的所有文章
pichuchen
2021-03-04 20:51:03
所以可能要先用看板分類掃過一輪這樣
whitefloor
2021-03-04 20:52:50
原來是這樣
whitefloor
2021-03-04 20:52:53
那我可以請問
whitefloor
2021-03-04 20:53:31
有哪裡可以參考data structure
whitefloor
2021-03-04 20:54:04
因為這樣跟一般的RDB處理不一樣
whitefloor
2021-03-04 20:56:42
我沒處理過這種的,所以query就不太了解,抱歉
2021-03-04
kuo-chuan weng
10:15:40
好的
pichuchen
19:42:35
https://github.com/Ptt-official-app/go-bbs/runs/2030664432?check_suite_focus=true#step:6:45
遇到小狀況了,SHM在 GitHub 上面跑 test 可能會有問題
遇到小狀況了,SHM在 GitHub 上面跑 test 可能會有問題
pichuchen
19:47:36
這個好像沒寫清楚是 http 還是 usecase的
whitefloor
19:48:19
好的 我改一下
whitefloor
19:52:05
是針對repository的
pichuchen
20:02:21
等等,兩個 issue 剛好同個 ID ...
pichuchen
20:05:19
go-bbs 應該不用處理歷史文章? 應該是交由 Ptt-backend 的 usecase去處理?
pichuchen
20:24:34
踩到雷了 shmid_ds 在 linux 和 darwin 的狀況不一樣
whitefloor
20:39:36
我看一下有沒有query
whitefloor
20:47:29
我有看到GetBoardArticleRecords
whitefloor
20:48:06
我是想直接撈到userID的所有文章,還是說在這之前要先用看板分類?
pichuchen
20:50:50
因為目前 PTT 的資料庫並沒有存某個 userID 的所有文章
pichuchen
20:51:03
所以可能要先用看板分類掃過一輪這樣
whitefloor
20:52:50
原來是這樣
whitefloor
20:52:53
那我可以請問
whitefloor
20:53:31
有哪裡可以參考data structure
jk82421723
20:54:00
@jk82421723 has joined the channel
whitefloor
20:54:04
因為這樣跟一般的RDB處理不一樣
whitefloor
20:56:42
我沒處理過這種的,所以query就不太了解,抱歉
jk82421723
21:18:35
大家好 ~
*怎麼知道這個專案的?*
soft_job
*您平常的活動或是工作?*
software engineer 工作內容偏全端+AWS
*平常出沒的區域?*
新北 / 台北
*您有興趣或者是關心的主題?*
System Design / Backend / Infra
*怎麼知道這個專案的?*
soft_job
*您平常的活動或是工作?*
software engineer 工作內容偏全端+AWS
*平常出沒的區域?*
新北 / 台北
*您有興趣或者是關心的主題?*
System Design / Backend / Infra
- 👋1
pichuchen
2021-03-04 21:23:32
好久不見的新手介紹
jk82421723
2021-03-04 21:25:23
hihi 剛剛才下完 go build 打完 /v1/token api
但對 go 不熟, 我要先看著專案惡補一下 Go 的基本語法了 XD
再來去認領 issue 了 XD
但對 go 不熟, 我要先看著專案惡補一下 Go 的基本語法了 XD
再來去認領 issue 了 XD
Timo Chiang
2021-03-05 09:37:58
Hi 歡迎加入!
這邊有些issue需要幫忙,有興趣的話歡迎認領唷!☺️
https://github.com/Ptt-official-app/Ptt-backend/issues/60
https://github.com/Ptt-official-app/Ptt-backend/issues/61
這邊有些issue需要幫忙,有興趣的話歡迎認領唷!☺️
https://github.com/Ptt-official-app/Ptt-backend/issues/60
https://github.com/Ptt-official-app/Ptt-backend/issues/61
MCLin
2021-03-05 11:19:01
Timo 極力宣傳中!
Timo Chiang
2021-03-05 14:27:09
你要不要也來幫幫忙😆
MCLin
2021-03-05 14:28:09
好啊
Timo Chiang
2021-03-05 14:38:32
感恩!再麻煩在issue底下留言認領哦~
pichuchen
21:23:32
好久不見的新手介紹
pichuchen
21:24:25
我發現 ipc_perm 的部分我可能不用cgo 很難安全地寫出來,因為實際上系統的狀況和 man 裡面的狀況會有出入
jk82421723
21:25:23
hihi 剛剛才下完 go build 打完 /v1/token api
但對 go 不熟, 我要先看著專案惡補一下 Go 的基本語法了 XD
再來去認領 issue 了 XD
但對 go 不熟, 我要先看著專案惡補一下 Go 的基本語法了 XD
再來去認領 issue 了 XD
pichuchen
21:25:32
這是man 的 ,後面是實際上 source code 的
- 👀2
2021-03-05
Timo Chiang
09:37:58
Hi 歡迎加入!
這邊有些issue需要幫忙,有興趣的話歡迎認領唷!☺️
https://github.com/Ptt-official-app/Ptt-backend/issues/60
https://github.com/Ptt-official-app/Ptt-backend/issues/61
這邊有些issue需要幫忙,有興趣的話歡迎認領唷!☺️
https://github.com/Ptt-official-app/Ptt-backend/issues/60
https://github.com/Ptt-official-app/Ptt-backend/issues/61
MCLin
11:19:01
Timo 極力宣傳中!
Timo Chiang
14:27:09
你要不要也來幫幫忙😆
MCLin
14:28:09
好啊
Timo Chiang
14:38:32
感恩!再麻煩在issue底下留言認領哦~
2021-03-06
titaneric
10:10:08
需要幫忙review以下PR,謝謝https://github.com/Ptt-official-app/go-bbs/pull/54
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/go-bbs/issues/52|#52> • close <https://github.com/Ptt-official-app/go-bbs/issues/53|#53> *:pick: 變更內容 / Details of Changes* • 縮寫命名 • JSON • UI • ID • 一致的receiver命名 • Error命名 • increment (E.g., idx++) • unreachable code • typo • PosOf省略bbs名稱
jk82421723
12:27:31
好奇想請教問一下, 用 intellij 裝 GoLand plugin 去寫的話, 跟本身直接用 GoLand 有什麼差別嗎
kira
15:05:30
Hi all, 有空的人幫忙 review 一下 PR
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/go-bbs/issues/38|#38> *:memo: 相關的 issue / Related Issues* • None *:pick: 變更內容 / Details of Changes* • 新增 user information 相關 `struct` (<https://github.com/ptt/pttbbs/blob/4d56e77f264960e43e060b77e442e166e5706417/include/pttstruct.h#L349|REF>)
pichuchen
23:07:03
*原本作法的問題 / Existed Problem* • 目前 PTT 的資料庫裡面是沒有熱門文章的 • 大家市面上看到的熱門文章其實是第三方網站幫PTT統計出來的,統計演算法應該也是各家不同 • 根據 <https://github.com/Ptt-official-app/Ptt-backend/issues/51|#51> 討論,應該在 Ptt-backend 這邊做會比較好? *實作細節 / Details of Implement* • 大致上會在 usecase 或是哪邊每隔一段時間就掃描一次目前的所有看板和所有文章,把可以統計的看板(公開看板)的文章統計出前幾名放在熱門文章資料庫(可能先存在 Process 裡面) • 在 usecase 有使用者請求時直接輸出這個資料庫的結果 *期程 / Schedule* • 討論時間:一週,到 3/13 • 實作時間:一週,到 3/20 • 確認時間:一週,到 3/27 *相關文件 / Documents* • 在其他網頁的熱門文章參考:<https://www.pttweb.cc/hot/all/today|https://www.pttweb.cc/hot/all/today> • 熱門看板: <https://www.ptt.cc/bbs/hotboards.html|https://www.ptt.cc/bbs/hotboards.html> • 在PTT八卦版上的相關討論: <https://www.ptt.cc/bbs/Gossiping/M.1592178635.A.0F8.html|https://www.ptt.cc/bbs/Gossiping/M.1592178635.A.0F8.html>
2021-03-07
pichuchen
17:50:51
<!channel> 這部分需要討論,這個也是先前提到的一個重點,我希望可以把原本的檔案儲存格式替換掉
目前我大致上列了三個大方向 TLV8, Protobuf 以及 JSON ,各自有各自的優缺點,如果有其他好的建議的話也歡迎提出來,這些我會放在影片上讓大家知道然後進一步討論這樣。
目前我大致上列了三個大方向 TLV8, Protobuf 以及 JSON ,各自有各自的優缺點,如果有其他好的建議的話也歡迎提出來,這些我會放在影片上讓大家知道然後進一步討論這樣。
titaneric
2021-03-07 18:33:28
之前有碰過avro,感覺也可以考慮。JSON雖然可以直接肉眼閱讀,但還蠻占空間的
pichuchen
2021-03-07 19:53:57
如果說 avro 和 protobuf 比較呢?
pichuchen
2021-03-07 20:06:28
titaneric
2021-03-07 20:30:18
Designing Data-Intensive Applications 這本書有介紹Protobuf以及avro,大致整理如下:
titaneric
2021-03-07 20:32:36
兩個方法都需要schema,Protobuf會需要tag name,每個field都不一樣,這會影響到schema變更,但不影響向前向後兼容。Avro可以用JSON定義schema,但向後兼容性較差,但好處是schema可以動態生成
pichuchen
2021-03-07 20:58:12
tag name 的部分應該兩者都一樣,JSON定schema的部分也是,不過avro有向後兼容性,但是protobuf現在也支援map了
pichuchen
2021-03-07 20:59:22
avro 的 json 有格式檢查用的工具嗎?
pichuchen
2021-03-07 21:06:02
titaneric
2021-03-07 21:26:32
這樣看起來PB就好很多,畢竟他跟Go依樣是Google親兒子。我投Protobuf一票
pichuchen
2021-03-07 23:31:19
我剛剛稍微試一下 proto 檔,整個有點像是再學一種和 golang 很類似的語言
pichuchen
2021-03-07 23:32:10
現在是在儲存的結構上假如不是以4K的因數來儲存的話,那這樣讀寫上可能不會最佳化的問題
pichuchen
2021-03-07 23:43:32
json的話有辦法透過 {}{} 這樣來辨別是兩筆資料,但是 Protobuf 似乎不行,除非定義一筆資料的file tag 然後用 stream 的方式讀入
titaneric
2021-03-08 00:15:02
@pichuchen 指的是多個struct合併到同個protobuf裡面嗎
pichuchen
2021-03-08 00:30:58
對,因為現在要從原有方式轉換成 protobuf 之類的方式,需要考慮到append record 的便利性
pichuchen
2021-03-08 00:31:25
如同這篇所寫的
pichuchen
2021-03-08 00:41:37
因為如果不支援Append 純粹用 protobuf 提供的 repeated 或是 packed 來做的話,每新增一筆紀錄可以說整份檔案要重新寫入
titaneric
2021-03-08 00:49:06
vu84au042k7
titaneric
2021-03-08 00:51:42
下面的Large Data Sets也反映同樣的訊息,這就看說儲存的資料是看成資料集還是DB。但我覺得我們儲存的比較像是DB類型...也就反映到一開始討論的用DB儲存
pichuchen
2021-03-08 00:53:20
用DB例如Sqlite 一樣還是會面臨類似的效能問題
titaneric
2021-03-08 00:58:33
的確,長期來看可能要引入數據工程的系統如Hadoop HDFS
pichuchen
2021-03-08 00:59:04
那個有點長,如果PTT打進美國的話也許可以考慮XD
pichuchen
2021-03-08 01:14:29
不過我覺得用sqlite 來儲存搞不好是個方向,不然就是實作兩個版本,一個用Protobuf 然後把所有發文紀錄存在使用者家目錄下,另外一個用sqlite來做,然後也是放在使用者家目錄下,最後跑benchmark來決定
titaneric
2021-03-08 12:18:22
感覺上面方法可行
gogog22510
2021-03-09 12:17:56
protobuf我用過,他是用來定義message type,不建議把他當成DB技術使用, 所以要自己實作或選擇一個data store or file system來存取資料。假如考慮到file格式可以選用類似SSTable (https://github.com/thomasjungblut/go-sstables)或是配套DB之類的
sqlite就是SQL DB了,基本上是不同種技術
sqlite就是SQL DB了,基本上是不同種技術
titaneric
2021-03-09 13:15:57
剛好在Designing Data-Intensive Applications上也有比較SSTable格式的LSM Tree以及B Tree。一樣要看所屬應用,LSM Tree在write資料很快,B Tree則是在read時比較快。在bbs這裡的話應該還是要看不同資料特性決定不同資料儲存格式
pichuchen
2021-03-09 14:56:38
SSTable 我就真的沒聽過他了,BTree 我知道,不過把 BTree壓進檔案裡也是一個點。
然後目前要存的東西是使用者的發文紀錄,然後會分開放在每個使用者的家目錄,比較特別的需求大概是通常都是最新的幾筆比較常會被存取
然後目前要存的東西是使用者的發文紀錄,然後會分開放在每個使用者的家目錄,比較特別的需求大概是通常都是最新的幾筆比較常會被存取
pichuchen
2021-03-09 14:56:54
說存取大概也是讀取比較多
Julian Chu
2021-03-09 15:16:39
會有管理者要直接修改資料的情況嗎,
pichuchen
2021-03-09 16:22:40
應該不太會?
Julian Chu
2021-03-09 16:32:12
恩 我的考量點是SQL Lite或是json的話 站長或是管理者要修改比較方便,但不確定現行的情況是怎樣的
,其他格式的話我們可能要提供額外的工具? 另外想問的是pichu你期望的效能要到什麼程度
,其他格式的話我們可能要提供額外的工具? 另外想問的是pichu你期望的效能要到什麼程度
pichuchen
2021-03-09 16:53:46
他其實只是一個暫時性的檔案而已,有點像是幫使用者紀錄已讀用的檔案,只是原先的作法通常會直接 fwrite 把本來的資料結構放入那個檔案裡
pichuchen
2021-03-09 16:54:24
那這樣的做法其實後面的人要去維護他或者是要新增欄位會麻煩很多,可能要全站停機才能做格式升級
pichuchen
2021-03-09 16:54:53
效能上的話是佔用的資源越低越好,越低的話那同樣的主機可以提供的服務資源會更多
pichuchen
2021-03-09 16:59:55
以數據來說的話,大部分的使用者發文數量可能是少於一百篇的,少數使用者可能會到三千多篇
pichuchen
2021-03-09 17:01:02
1000篇的狀況即使不小心用了 O(n^2) 的演算法,應該還不會感覺到哪裡怪怪的
gogog22510
2021-03-10 00:48:10
SSTable是Google內部用來實作index的檔案格式,以歷史文章來說的話,可以使用RecordIO也是Google內部常用的檔案格式,適合append,read and skip。假如要用protobuf的話,建議可以用protobuf+SSTable或RecordIO。 至於效能的話應該還是挺不錯的,但具體上可以跑benchmark決定
pichuchen
2021-03-10 00:48:55
目前很粗糙的測試結果出來了
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkProtobufWrite-4 100 12488268 ns/op
BenchmarkProtobufArrayWrite-4 667 1519035 ns/op
BenchmarkSqliteWrite-4 79 16020372 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 4.517s```
https://github.com/Ptt-official-app/go-bbs/blob/feature/user_articles/user_article_test.go
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkProtobufWrite-4 100 12488268 ns/op
BenchmarkProtobufArrayWrite-4 667 1519035 ns/op
BenchmarkSqliteWrite-4 79 16020372 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 4.517s```
https://github.com/Ptt-official-app/go-bbs/blob/feature/user_articles/user_article_test.go
pichuchen
2021-03-10 00:51:51
@gogog22510 SSTable 有套件連結嗎? 看要不要我這邊順便把測試程式碼寫上去
pichuchen
2021-03-10 00:52:41
然後檔案大小的比較是這樣: BenchmarkProtobufWrite: 30000
BenchmarkProtobufArrayWrite: 32000
BenchmarkSqliteWrite: 45056
上面的測試是純粹開檔後寫入一千筆相同紀錄後關檔然後再刪掉他
BenchmarkProtobufArrayWrite: 32000
BenchmarkSqliteWrite: 45056
上面的測試是純粹開檔後寫入一千筆相同紀錄後關檔然後再刪掉他
gogog22510
2021-03-10 00:53:50
https://github.com/thomasjungblut/go-sstables
我是找到這個,看看能不能用,這是別人實作的go套件
我是找到這個,看看能不能用,這是別人實作的go套件
pichuchen
2021-03-10 01:01:18
gogog22510
2021-03-10 01:01:51
看起來是的
pichuchen
2021-03-10 01:11:17
插入的效能看起來沒有比較好
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 75 90115719 ns/op
BenchmarkProtobufWrite-4 100 41232748 ns/op
BenchmarkProtobufArrayWrite-4 474 3451642 ns/op
BenchmarkSqliteWrite-4 48 33417956 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 14.940s```
也有可能是Bench code 不夠準確的問題
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 75 90115719 ns/op
BenchmarkProtobufWrite-4 100 41232748 ns/op
BenchmarkProtobufArrayWrite-4 474 3451642 ns/op
BenchmarkSqliteWrite-4 48 33417956 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 14.940s```
也有可能是Bench code 不夠準確的問題
pichuchen
2021-03-10 01:12:29
檔案大小方面,1000筆佔 45056 bytes
pichuchen
2021-03-10 01:19:28
我剛剛去翻一下SSTable 的資料,他應該是 Key/Value Map, 這點的話應該和我們現在要解決的問題比較不同,因為我們在查詢資料的方式大概會是在一定時間後的多少筆資料這樣
gogog22510
2021-03-10 01:21:12
對的,SSTable只是key/value 但sorted, 所以key是time stamp的話也是可以的
pichuchen
2021-03-10 01:23:19
可以偷吃步的把filename當作Key, 因為BBS的filename通常和timestamp相關
gogog22510
2021-03-10 01:23:28
且可能多了一些meta data所以有影響,畢竟它是用來做index
pichuchen
2021-03-10 01:24:17
嗯嗯
pichuchen
2021-03-10 01:26:52
我剛剛比較驚訝的是寫成Array會比單純疊資料還要慢的這點(還慢很多),所以我把寫法稍作修改,讓Write變成一次寫入
pichuchen
2021-03-10 01:27:29
結果和Array的版本不相上下了
pichuchen
2021-03-10 01:27:43
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 22619798 ns/op
BenchmarkProtobufWrite-4 169 6769876 ns/op
BenchmarkProtobufBufWrite-4 1362 899403 ns/op
BenchmarkProtobufArrayWrite-4 1497 772189 ns/op
BenchmarkSqliteWrite-4 177 7717207 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 10.133s```
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 22619798 ns/op
BenchmarkProtobufWrite-4 169 6769876 ns/op
BenchmarkProtobufBufWrite-4 1362 899403 ns/op
BenchmarkProtobufArrayWrite-4 1497 772189 ns/op
BenchmarkSqliteWrite-4 177 7717207 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 10.133s```
gogog22510
2021-03-10 01:32:24
還可以比較read囉,的確可以預期SSTable write差一點因為是index, 但理論上query會快一些
gogog22510
2021-03-10 01:36:10
理論上歷史數據功能可能是read > write的,所以假如read有比較優秀是不錯的
SQLite好處也是方便使用比較多人會
SQLite好處也是方便使用比較多人會
pichuchen
2021-03-10 01:55:43
我待會再寫一個 Append 的,這個應該Array的方法就會輸了(吧
pichuchen
2021-03-10 02:02:10
append 遇到狀況了
``` user_article_test.go:87: error: file is not empty
user_article_test.go:92: error: writer was either not opened yet or is closed already```
``` user_article_test.go:87: error: file is not empty
user_article_test.go:92: error: writer was either not opened yet or is closed already```
pichuchen
2021-03-10 02:06:19
他是不是只能一次寫完不能append啊?
pichuchen
2021-03-10 02:31:06
新增了十筆以及JSON的狀況
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 1255 4859450 ns/op
BenchmarkProtobufWrite-4 285 3752161 ns/op
BenchmarkProtobufAppend-4 282 5166763 ns/op
BenchmarkProtobufBufWrite-4 448 2492569 ns/op
BenchmarkProtobufArrayWrite-4 1419 1808260 ns/op
BenchmarkProtobufArrayAppend-4 195 8061710 ns/op
BenchmarkJSONStreamWrite-4 516 2251661 ns/op
BenchmarkJSONStreamBufWrite-4 1166 1209535 ns/op
BenchmarkJSONStreamAppend-4 518 3277587 ns/op
BenchmarkJSONArrayWrite-4 745 5451195 ns/op
BenchmarkJSONArrayAppend-4 100 21793137 ns/op
BenchmarkSqliteWrite-4 177 7465205 ns/op
BenchmarkSqliteAppend-4 27 45531985 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 35.766s```
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 1255 4859450 ns/op
BenchmarkProtobufWrite-4 285 3752161 ns/op
BenchmarkProtobufAppend-4 282 5166763 ns/op
BenchmarkProtobufBufWrite-4 448 2492569 ns/op
BenchmarkProtobufArrayWrite-4 1419 1808260 ns/op
BenchmarkProtobufArrayAppend-4 195 8061710 ns/op
BenchmarkJSONStreamWrite-4 516 2251661 ns/op
BenchmarkJSONStreamBufWrite-4 1166 1209535 ns/op
BenchmarkJSONStreamAppend-4 518 3277587 ns/op
BenchmarkJSONArrayWrite-4 745 5451195 ns/op
BenchmarkJSONArrayAppend-4 100 21793137 ns/op
BenchmarkSqliteWrite-4 177 7465205 ns/op
BenchmarkSqliteAppend-4 27 45531985 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 35.766s```
gogog22510
2021-03-10 02:33:03
讓我研究看看
gogog22510
2021-03-10 02:41:13
沒錯我忘記了XD SSTable是immutable的,假如能保證sequence的話,你可以試試看RecordIo嗎?
https://github.com/thomasjungblut/go-sstables/blob/master/recordio/README.md
https://github.com/thomasjungblut/go-sstables/blob/master/recordio/README.md
pichuchen
2021-03-10 02:49:45
讀取後重新寫入的部分我試了一下沒辦法
pichuchen
2021-03-10 02:50:36
我先把目前結果推上去了
$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 62030975 ns/op
BenchmarkProtobufWrite-4 76 35507473 ns/op
BenchmarkProtobufAppend-4 7 146766586 ns/op
BenchmarkProtobufBufWrite-4 37 49721741 ns/op
BenchmarkProtobufArrayWrite-4 908 1639579 ns/op
BenchmarkProtobufArrayAppend-4 2 535421312 ns/op
BenchmarkJSONStreamWrite-4 100 14779489 ns/op
BenchmarkJSONStreamBufWrite-4 469 2836098 ns/op
BenchmarkJSONStreamAppend-4 6 223996055 ns/op
BenchmarkJSONArrayWrite-4 100 59582955 ns/op
BenchmarkJSONArrayAppend-4 1 1353481958 ns/op
BenchmarkSqliteWrite-4 66 20464509 ns/op
BenchmarkSqliteAppend-4 1 4681380500 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 37.165s
$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 62030975 ns/op
BenchmarkProtobufWrite-4 76 35507473 ns/op
BenchmarkProtobufAppend-4 7 146766586 ns/op
BenchmarkProtobufBufWrite-4 37 49721741 ns/op
BenchmarkProtobufArrayWrite-4 908 1639579 ns/op
BenchmarkProtobufArrayAppend-4 2 535421312 ns/op
BenchmarkJSONStreamWrite-4 100 14779489 ns/op
BenchmarkJSONStreamBufWrite-4 469 2836098 ns/op
BenchmarkJSONStreamAppend-4 6 223996055 ns/op
BenchmarkJSONArrayWrite-4 100 59582955 ns/op
BenchmarkJSONArrayAppend-4 1 1353481958 ns/op
BenchmarkSqliteWrite-4 66 20464509 ns/op
BenchmarkSqliteAppend-4 1 4681380500 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 37.165s
gogog22510
2021-03-10 03:33:16
那個套件不支援append.... 我找了另一個
https://pkg.go.dev/github.com/eclesh/recordio
https://pkg.go.dev/github.com/eclesh/recordio
gogog22510
2021-03-10 03:33:23
這是結果
goos: linux
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
cpu: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
BenchmarkRecordIOProtobufWrite-4 5654 198166 ns/op
BenchmarkProtobufWrite-4 642 1680291 ns/op
BenchmarkProtobufBufWrite-4 4791 243438 ns/op
BenchmarkProtobufArrayWrite-4 8821 138341 ns/op
BenchmarkSqliteWrite-4 39 33877995 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 6.208s
goos: linux
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
cpu: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
BenchmarkRecordIOProtobufWrite-4 5654 198166 ns/op
BenchmarkProtobufWrite-4 642 1680291 ns/op
BenchmarkProtobufBufWrite-4 4791 243438 ns/op
BenchmarkProtobufArrayWrite-4 8821 138341 ns/op
BenchmarkSqliteWrite-4 39 33877995 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 6.208s
titaneric
18:33:28
之前有碰過avro,感覺也可以考慮。JSON雖然可以直接肉眼閱讀,但還蠻占空間的
pichuchen
19:53:57
如果說 avro 和 protobuf 比較呢?
pichuchen
20:06:28
titaneric
20:30:18
Designing Data-Intensive Applications 這本書有介紹Protobuf以及avro,大致整理如下:
titaneric
20:32:36
兩個方法都需要schema,Protobuf會需要tag name,每個field都不一樣,這會影響到schema變更,但不影響向前向後兼容。Avro可以用JSON定義schema,但向後兼容性較差,但好處是schema可以動態生成
pichuchen
20:58:12
tag name 的部分應該兩者都一樣,JSON定schema的部分也是,不過avro有向後兼容性,但是protobuf現在也支援map了
pichuchen
20:59:22
avro 的 json 有格式檢查用的工具嗎?
pichuchen
21:06:02
titaneric
21:26:32
這樣看起來PB就好很多,畢竟他跟Go依樣是Google親兒子。我投Protobuf一票
pichuchen
23:31:19
我剛剛稍微試一下 proto 檔,整個有點像是再學一種和 golang 很類似的語言
pichuchen
23:32:10
現在是在儲存的結構上假如不是以4K的因數來儲存的話,那這樣讀寫上可能不會最佳化的問題
pichuchen
23:43:32
json的話有辦法透過 {}{} 這樣來辨別是兩筆資料,但是 Protobuf 似乎不行,除非定義一筆資料的file tag 然後用 stream 的方式讀入
2021-03-08
titaneric
00:15:02
@pichuchen 指的是多個struct合併到同個protobuf裡面嗎
pichuchen
00:30:58
對,因為現在要從原有方式轉換成 protobuf 之類的方式,需要考慮到append record 的便利性
pichuchen
00:31:25
如同這篇所寫的
pichuchen
00:41:37
因為如果不支援Append 純粹用 protobuf 提供的 repeated 或是 packed 來做的話,每新增一筆紀錄可以說整份檔案要重新寫入
titaneric
00:49:06
vu84au042k7
titaneric
00:51:42
下面的Large Data Sets也反映同樣的訊息,這就看說儲存的資料是看成資料集還是DB。但我覺得我們儲存的比較像是DB類型...也就反映到一開始討論的用DB儲存
pichuchen
00:53:20
用DB例如Sqlite 一樣還是會面臨類似的效能問題
titaneric
00:58:33
的確,長期來看可能要引入數據工程的系統如Hadoop HDFS
pichuchen
00:59:04
那個有點長,如果PTT打進美國的話也許可以考慮XD
pichuchen
01:14:29
不過我覺得用sqlite 來儲存搞不好是個方向,不然就是實作兩個版本,一個用Protobuf 然後把所有發文紀錄存在使用者家目錄下,另外一個用sqlite來做,然後也是放在使用者家目錄下,最後跑benchmark來決定
whitefloor
04:08:16
我想請問我push 到 development說我身份驗證失敗 是因為用clone複製專案的關係嗎==
wagaru
11:26:10
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/116|#116> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/116|#116> • <https://github.com/Ptt-official-app/Ptt-backend/issues/63|#63> *:pick: 變更內容 / Details of Changes* • 參考 <https://github.com/Ptt-official-app/go-bbs/issues/61|go-bbs的討論> • 在 repository/board.go 新增以下 mock interfaces: • PostsLimitedBoardRecord • LoginsLimitedBoardRecord • BadPostLimitedBoardRecord • repository/repository.go 的 Repository interface 提供以下 method • GetBoardPostsLimited() • GetBoardLoginsLimited() • GetBoardBadPostLimited()
陳昱廷
11:36:48
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/121|#121> • close #0 *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/17|#17> *:pick: 變更內容 / Details of Changes* 變更包名
陳昱廷
11:38:45
今天會先把包名修正在 merge 主線
陳昱廷
11:39:34
實作細節 / Details of Implement 實作 <https://github.com/Ptt-official-app/Ptt-backend/issues/36|#36> 內的討論進行實作 期程 / Schedule 討論時間: 三天 實作時間: 一天 確認時間: 一天 相關文件 / Documents route_boards_treasures.go route_boards_treasures_test.go 備註: pr 請指向 development_enable_lint branch
Lester
2021-03-08 19:26:55
J 個我想要試試看,謝謝。
陳昱廷
11:40:28
有興趣者可以直接 tag 或者 私訊我
titaneric
12:18:22
感覺上面方法可行
Lester
19:26:55
J 個我想要試試看,謝謝。
2021-03-09
陳昱廷
12:03:33
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/110|#110> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/109|#109> *:pick: 變更內容 / Details of Changes* 增加 route_users 相關的註解
陳昱廷
12:03:43
這個根據討論修改了
gogog22510
12:04:06
@gogog22510 has joined the channel
gogog22510
12:17:56
protobuf我用過,他是用來定義message type,不建議把他當成DB技術使用, 所以要自己實作或選擇一個data store or file system來存取資料。假如考慮到file格式可以選用類似SSTable (https://github.com/thomasjungblut/go-sstables)或是配套DB之類的
sqlite就是SQL DB了,基本上是不同種技術
sqlite就是SQL DB了,基本上是不同種技術
pichuchen
12:49:44
如果是 /* */ 這樣的註解 go doc 能順利生成嗎?
titaneric
13:15:57
剛好在Designing Data-Intensive Applications上也有比較SSTable格式的LSM Tree以及B Tree。一樣要看所屬應用,LSM Tree在write資料很快,B Tree則是在read時比較快。在bbs這裡的話應該還是要看不同資料特性決定不同資料儲存格式
pichuchen
14:56:38
SSTable 我就真的沒聽過他了,BTree 我知道,不過把 BTree壓進檔案裡也是一個點。
然後目前要存的東西是使用者的發文紀錄,然後會分開放在每個使用者的家目錄,比較特別的需求大概是通常都是最新的幾筆比較常會被存取
然後目前要存的東西是使用者的發文紀錄,然後會分開放在每個使用者的家目錄,比較特別的需求大概是通常都是最新的幾筆比較常會被存取
pichuchen
14:56:54
說存取大概也是讀取比較多
陳昱廷
15:11:57
我看兩小時前有一個 go-bbs 到0.3 版
陳昱廷
15:12:05
但是我拉不下來
Julian Chu
15:16:39
會有管理者要直接修改資料的情況嗎,
pichuchen
16:22:40
應該不太會?
Julian Chu
16:32:12
恩 我的考量點是SQL Lite或是json的話 站長或是管理者要修改比較方便,但不確定現行的情況是怎樣的
,其他格式的話我們可能要提供額外的工具? 另外想問的是pichu你期望的效能要到什麼程度
,其他格式的話我們可能要提供額外的工具? 另外想問的是pichu你期望的效能要到什麼程度
pichuchen
16:53:46
他其實只是一個暫時性的檔案而已,有點像是幫使用者紀錄已讀用的檔案,只是原先的作法通常會直接 fwrite 把本來的資料結構放入那個檔案裡
pichuchen
16:54:24
那這樣的做法其實後面的人要去維護他或者是要新增欄位會麻煩很多,可能要全站停機才能做格式升級
pichuchen
16:54:53
效能上的話是佔用的資源越低越好,越低的話那同樣的主機可以提供的服務資源會更多
pichuchen
16:59:55
以數據來說的話,大部分的使用者發文數量可能是少於一百篇的,少數使用者可能會到三千多篇
pichuchen
17:01:02
1000篇的狀況即使不小心用了 O(n^2) 的演算法,應該還不會感覺到哪裡怪怪的
pichuchen
17:21:05
剛剛查一下, windows 上面的 go 居然會 build _unix.go
pichuchen
23:09:02
2021-03-10
gogog22510
00:48:10
SSTable是Google內部用來實作index的檔案格式,以歷史文章來說的話,可以使用RecordIO也是Google內部常用的檔案格式,適合append,read and skip。假如要用protobuf的話,建議可以用protobuf+SSTable或RecordIO。 至於效能的話應該還是挺不錯的,但具體上可以跑benchmark決定
pichuchen
00:48:55
Replied to a thread: 2021-03-07 17:50:51
目前很粗糙的測試結果出來了
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkProtobufWrite-4 100 12488268 ns/op
BenchmarkProtobufArrayWrite-4 667 1519035 ns/op
BenchmarkSqliteWrite-4 79 16020372 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 4.517s```
https://github.com/Ptt-official-app/go-bbs/blob/feature/user_articles/user_article_test.go
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkProtobufWrite-4 100 12488268 ns/op
BenchmarkProtobufArrayWrite-4 667 1519035 ns/op
BenchmarkSqliteWrite-4 79 16020372 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 4.517s```
https://github.com/Ptt-official-app/go-bbs/blob/feature/user_articles/user_article_test.go
pichuchen
00:51:51
@gogog22510 SSTable 有套件連結嗎? 看要不要我這邊順便把測試程式碼寫上去
pichuchen
00:52:41
然後檔案大小的比較是這樣: BenchmarkProtobufWrite: 30000
BenchmarkProtobufArrayWrite: 32000
BenchmarkSqliteWrite: 45056
上面的測試是純粹開檔後寫入一千筆相同紀錄後關檔然後再刪掉他
BenchmarkProtobufArrayWrite: 32000
BenchmarkSqliteWrite: 45056
上面的測試是純粹開檔後寫入一千筆相同紀錄後關檔然後再刪掉他
gogog22510
00:53:50
https://github.com/thomasjungblut/go-sstables
我是找到這個,看看能不能用,這是別人實作的go套件
我是找到這個,看看能不能用,這是別人實作的go套件
pichuchen
01:01:18
gogog22510
01:01:51
看起來是的
pichuchen
01:11:17
插入的效能看起來沒有比較好
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 75 90115719 ns/op
BenchmarkProtobufWrite-4 100 41232748 ns/op
BenchmarkProtobufArrayWrite-4 474 3451642 ns/op
BenchmarkSqliteWrite-4 48 33417956 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 14.940s```
也有可能是Bench code 不夠準確的問題
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 75 90115719 ns/op
BenchmarkProtobufWrite-4 100 41232748 ns/op
BenchmarkProtobufArrayWrite-4 474 3451642 ns/op
BenchmarkSqliteWrite-4 48 33417956 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 14.940s```
也有可能是Bench code 不夠準確的問題
pichuchen
01:12:29
檔案大小方面,1000筆佔 45056 bytes
pichuchen
01:19:28
我剛剛去翻一下SSTable 的資料,他應該是 Key/Value Map, 這點的話應該和我們現在要解決的問題比較不同,因為我們在查詢資料的方式大概會是在一定時間後的多少筆資料這樣
gogog22510
01:21:12
對的,SSTable只是key/value 但sorted, 所以key是time stamp的話也是可以的
pichuchen
01:23:19
可以偷吃步的把filename當作Key, 因為BBS的filename通常和timestamp相關
gogog22510
01:23:28
且可能多了一些meta data所以有影響,畢竟它是用來做index
pichuchen
01:24:17
嗯嗯
pichuchen
01:26:52
我剛剛比較驚訝的是寫成Array會比單純疊資料還要慢的這點(還慢很多),所以我把寫法稍作修改,讓Write變成一次寫入
pichuchen
01:27:29
結果和Array的版本不相上下了
pichuchen
01:27:43
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 22619798 ns/op
BenchmarkProtobufWrite-4 169 6769876 ns/op
BenchmarkProtobufBufWrite-4 1362 899403 ns/op
BenchmarkProtobufArrayWrite-4 1497 772189 ns/op
BenchmarkSqliteWrite-4 177 7717207 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 10.133s```
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 22619798 ns/op
BenchmarkProtobufWrite-4 169 6769876 ns/op
BenchmarkProtobufBufWrite-4 1362 899403 ns/op
BenchmarkProtobufArrayWrite-4 1497 772189 ns/op
BenchmarkSqliteWrite-4 177 7717207 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 10.133s```
gogog22510
01:32:24
還可以比較read囉,的確可以預期SSTable write差一點因為是index, 但理論上query會快一些
gogog22510
01:36:10
理論上歷史數據功能可能是read > write的,所以假如read有比較優秀是不錯的
SQLite好處也是方便使用比較多人會
SQLite好處也是方便使用比較多人會
pichuchen
01:55:43
我待會再寫一個 Append 的,這個應該Array的方法就會輸了(吧
pichuchen
02:02:10
append 遇到狀況了
``` user_article_test.go:87: error: file is not empty
user_article_test.go:92: error: writer was either not opened yet or is closed already```
``` user_article_test.go:87: error: file is not empty
user_article_test.go:92: error: writer was either not opened yet or is closed already```
pichuchen
02:06:19
他是不是只能一次寫完不能append啊?
pichuchen
02:31:06
新增了十筆以及JSON的狀況
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 1255 4859450 ns/op
BenchmarkProtobufWrite-4 285 3752161 ns/op
BenchmarkProtobufAppend-4 282 5166763 ns/op
BenchmarkProtobufBufWrite-4 448 2492569 ns/op
BenchmarkProtobufArrayWrite-4 1419 1808260 ns/op
BenchmarkProtobufArrayAppend-4 195 8061710 ns/op
BenchmarkJSONStreamWrite-4 516 2251661 ns/op
BenchmarkJSONStreamBufWrite-4 1166 1209535 ns/op
BenchmarkJSONStreamAppend-4 518 3277587 ns/op
BenchmarkJSONArrayWrite-4 745 5451195 ns/op
BenchmarkJSONArrayAppend-4 100 21793137 ns/op
BenchmarkSqliteWrite-4 177 7465205 ns/op
BenchmarkSqliteAppend-4 27 45531985 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 35.766s```
```$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 1255 4859450 ns/op
BenchmarkProtobufWrite-4 285 3752161 ns/op
BenchmarkProtobufAppend-4 282 5166763 ns/op
BenchmarkProtobufBufWrite-4 448 2492569 ns/op
BenchmarkProtobufArrayWrite-4 1419 1808260 ns/op
BenchmarkProtobufArrayAppend-4 195 8061710 ns/op
BenchmarkJSONStreamWrite-4 516 2251661 ns/op
BenchmarkJSONStreamBufWrite-4 1166 1209535 ns/op
BenchmarkJSONStreamAppend-4 518 3277587 ns/op
BenchmarkJSONArrayWrite-4 745 5451195 ns/op
BenchmarkJSONArrayAppend-4 100 21793137 ns/op
BenchmarkSqliteWrite-4 177 7465205 ns/op
BenchmarkSqliteAppend-4 27 45531985 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 35.766s```
gogog22510
02:33:03
讓我研究看看
gogog22510
02:41:13
沒錯我忘記了XD SSTable是immutable的,假如能保證sequence的話,你可以試試看RecordIo嗎?
https://github.com/thomasjungblut/go-sstables/blob/master/recordio/README.md
https://github.com/thomasjungblut/go-sstables/blob/master/recordio/README.md
pichuchen
02:49:45
讀取後重新寫入的部分我試了一下沒辦法
pichuchen
02:50:36
我先把目前結果推上去了
$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 62030975 ns/op
BenchmarkProtobufWrite-4 76 35507473 ns/op
BenchmarkProtobufAppend-4 7 146766586 ns/op
BenchmarkProtobufBufWrite-4 37 49721741 ns/op
BenchmarkProtobufArrayWrite-4 908 1639579 ns/op
BenchmarkProtobufArrayAppend-4 2 535421312 ns/op
BenchmarkJSONStreamWrite-4 100 14779489 ns/op
BenchmarkJSONStreamBufWrite-4 469 2836098 ns/op
BenchmarkJSONStreamAppend-4 6 223996055 ns/op
BenchmarkJSONArrayWrite-4 100 59582955 ns/op
BenchmarkJSONArrayAppend-4 1 1353481958 ns/op
BenchmarkSqliteWrite-4 66 20464509 ns/op
BenchmarkSqliteAppend-4 1 4681380500 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 37.165s
$ go test -bench=.
goos: darwin
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
BenchmarkSSTableProtobufWrite-4 100 62030975 ns/op
BenchmarkProtobufWrite-4 76 35507473 ns/op
BenchmarkProtobufAppend-4 7 146766586 ns/op
BenchmarkProtobufBufWrite-4 37 49721741 ns/op
BenchmarkProtobufArrayWrite-4 908 1639579 ns/op
BenchmarkProtobufArrayAppend-4 2 535421312 ns/op
BenchmarkJSONStreamWrite-4 100 14779489 ns/op
BenchmarkJSONStreamBufWrite-4 469 2836098 ns/op
BenchmarkJSONStreamAppend-4 6 223996055 ns/op
BenchmarkJSONArrayWrite-4 100 59582955 ns/op
BenchmarkJSONArrayAppend-4 1 1353481958 ns/op
BenchmarkSqliteWrite-4 66 20464509 ns/op
BenchmarkSqliteAppend-4 1 4681380500 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 37.165s
gogog22510
03:33:16
那個套件不支援append.... 我找了另一個
https://pkg.go.dev/github.com/eclesh/recordio
https://pkg.go.dev/github.com/eclesh/recordio
gogog22510
03:33:23
這是結果
goos: linux
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
cpu: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
BenchmarkRecordIOProtobufWrite-4 5654 198166 ns/op
BenchmarkProtobufWrite-4 642 1680291 ns/op
BenchmarkProtobufBufWrite-4 4791 243438 ns/op
BenchmarkProtobufArrayWrite-4 8821 138341 ns/op
BenchmarkSqliteWrite-4 39 33877995 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 6.208s
goos: linux
goarch: amd64
pkg: github.com/Ptt-official-app/go-bbs
cpu: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
BenchmarkRecordIOProtobufWrite-4 5654 198166 ns/op
BenchmarkProtobufWrite-4 642 1680291 ns/op
BenchmarkProtobufBufWrite-4 4791 243438 ns/op
BenchmarkProtobufArrayWrite-4 8821 138341 ns/op
BenchmarkSqliteWrite-4 39 33877995 ns/op
PASS
ok github.com/Ptt-official-app/go-bbs 6.208s
whitefloor
03:48:18
各位好,請有空的人麻煩幫我Review,感謝
https://github.com/Ptt-official-app/Ptt-backend/pull/123
https://github.com/Ptt-official-app/Ptt-backend/pull/123
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/59|#59> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/59|#59> *:pick: 變更內容 / Details of Changes* • 實作 http/usecase/repository • 測試 http/usecase
- 👀1
Julian Chu
2021-03-10 16:44:07
這個api 應該要看那段文件? 我沒找到的說
whitefloor
2021-03-10 20:22:16
對
pichuchen
2021-03-10 20:22:41
然後那個是一次實作完三個子ISSUE嗎?XD
whitefloor
2021-03-10 20:25:46
對的 我晚點把說明改一下
Julian Chu
2021-03-10 21:37:12
搞笑了,我以為是”個人看板”歷史文章XD
pichuchen
2021-03-11 13:57:50
XDDDDD
個版的歷史文章不就是看板文章了?
個版的歷史文章不就是看板文章了?
pichuchen
2021-03-11 13:58:29
不過確實以前不需要這項功能是因為大家會把自己發過想留的文轉回自己個版
whitefloor
2021-03-11 14:03:36
我有在doc加上修改建議了,大家找這個好像都找不到XDDDDDD
whitefloor
2021-03-11 14:03:42
我也是剛好矇中才看到的
whitefloor
2021-03-15 01:02:04
hi 請問這個PR還有需要改進的地方嗎
Julian Chu
2021-03-15 01:12:36
approved了, 我會建議下次 re-request a PR review , 這樣 reviewer才會知道你完成了
whitefloor
2021-03-15 01:35:21
好的,感謝
whitefloor
2021-03-15 01:51:13
原來還有這種功能,我以為push之後在issue的member都會看到XD
Julian Chu
2021-03-15 02:33:01
會看到啊 只是不能確定修改完成了沒XD
wagaru
11:00:51
https://github.com/Ptt-official-app/Ptt-backend/issues/63 這個issue有人要試試嗎?還剩usecase跟delivery🙂
*實作細節 / Details of Implement* 根據目前架構,應該分成 `delivery/http` `usecase` `repository` 三個子 ISSUE 下去實作。 ☐ http 部分請依照文件實作並且有初步的 testcode。 ☐ usecase 部分應該是直接將 repository 的結果輸出即可。 ☐ repository 因為 go-bbs 可能還沒完成,因此需要先 mock 一個暫時性的結果等待 go-bbs 完成之後進行串接。 • ISSUE <https://github.com/Ptt-official-app/Ptt-backend/issues/116|#116> *期程 / Schedule* • 討論時間: 一週, 到 3/9 • 實作時間: 一週, 到 3/16 • 確認時間: 一週, 到 3/23 注意這個 endpoint 是 `/v1/boards/{{board_id}}/information` *相關文件 / Documents* <https://docs.google.com/document/d/18DsZOyrlr5BIl2kKxZH7P2QxFLG02xL2SO0PzVHVY3k|PTT 後端系統協定>
gogog22510
2021-03-10 11:36:18
我可以試試
wagaru
2021-03-10 11:40:59
好的,那記得先看開子issue再實作
gogog22510
11:36:18
我可以試試
wagaru
11:40:59
好的,那記得先看開子issue再實作
陳昱廷
15:11:58
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/go-bbs/issues/67|#67> *:memo: 相關的 issue / Related Issues* 無 *:pick: 變更內容 / Details of Changes* 增加了 windows build 的支援。
陳昱廷
15:12:12
增加了對 windows 支援
Julian Chu
16:44:07
這個api 應該要看那段文件? 我沒找到的說
whitefloor
20:22:16
對
pichuchen
20:22:41
然後那個是一次實作完三個子ISSUE嗎?XD
whitefloor
20:25:46
對的 我晚點把說明改一下
Julian Chu
21:37:12
搞笑了,我以為是”個人看板”歷史文章XD
2021-03-11
pichuchen
10:50:56
go-bbs v0.3.3 修正好 windows 的tag 推上去了
pichuchen
13:57:50
XDDDDD
個版的歷史文章不就是看板文章了?
個版的歷史文章不就是看板文章了?
pichuchen
13:58:29
不過確實以前不需要這項功能是因為大家會把自己發過想留的文轉回自己個版
whitefloor
14:03:36
我有在doc加上修改建議了,大家找這個好像都找不到XDDDDDD
whitefloor
14:03:42
我也是剛好矇中才看到的
陳昱廷
16:38:34
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/128|#128> • close #0 *:memo: 相關的 issue / Related Issues* *:pick: 變更內容 / Details of Changes* 增加對 go-bbs 0.3 support 跟修正 lint
陳昱廷
16:40:56
目前 pr 在 ubuntu 跑 golangci-lint 會 fail
陳昱廷
16:41:16
希望有一個人可以幫我拉到 ubuntu 作測試
j31422210
2021-03-11 20:21:38
手邊剛好有 ubuntu 20.04
我要測試的話是要先 clone 你的專案
然後 go build . 嗎?
我要測試的話是要先 clone 你的專案
然後 go build . 嗎?
Julian Chu
2021-03-12 00:53:01
go.sum 的問題
Julian Chu
2021-03-12 00:53:50
用 ./make.bash deps或 make.bat deps
更新 go.sum後 commit 應該就可以了
更新 go.sum後 commit 應該就可以了
修正好了
陳昱廷
16:46:24
windows 上測試是沒問題的 build test 都能通過
j31422210
20:21:38
手邊剛好有 ubuntu 20.04
我要測試的話是要先 clone 你的專案
然後 go build . 嗎?
我要測試的話是要先 clone 你的專案
然後 go build . 嗎?
2021-03-12
Julian Chu
00:53:01
go.sum 的問題
Julian Chu
00:53:50
用 ./make.bash deps或 make.bat deps
更新 go.sum後 commit 應該就可以了
更新 go.sum後 commit 應該就可以了
陳昱廷
11:02:37
修正好了
titaneric
12:10:30
https://github.com/Ptt-official-app/go-bbs/pull/70 上面PR需要幫忙review,麻煩一下
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/go-bbs/issues/65|#65> *:pick: 變更內容 / Details of Changes* • 補足BoardHeader剩餘欄位 • 新增對應測試,但因原本的測試資料中在BrdName及title這兩個field中有塞其他資料(NewBoardHeaderWithByte才要用split取\x00之前的),所以沒辦法全測,改測前兩個。
Lester
14:39:42
https://github.com/Ptt-official-app/Ptt-backend/pull/134
這個 PR 需要幫忙 Review ,謝謝大家。
這個 PR 需要幫忙 Review ,謝謝大家。
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/73|#73> *:pick: 變更內容 / Details of Changes* • Implement MockUsecase.GetBoardTreasures • Added TestFetchBoardTreasures
2021-03-13
gogog22510
10:56:40
https://github.com/Ptt-official-app/Ptt-backend/pull/127
需要幫忙 Review PR,謝謝大家
需要幫忙 Review PR,謝謝大家
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/126|#126> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/63|#63> *:pick: 變更內容 / Details of Changes* • 實作 http/usecase • 測試 http/usecase
- ✅1
2021-03-14
nickyanggg
08:44:19
再麻煩大家幫忙 review 一下,感謝~
https://github.com/Ptt-official-app/Ptt-backend/pull/138
https://github.com/Ptt-official-app/Ptt-backend/pull/138
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/137|#137> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/137|#137> *:pick: 變更內容 / Details of Changes* • delivery/http/route.go • delivery/http/route_boards.go 中新增 getBoardSettings、marshalBoardHeaderSettings
- 👀1
pichuchen
17:30:02
開發站上面的程式更新了
2021-03-15
whitefloor
00:50:05
hi 請問 #123這個PR還有需要改進的地方嗎
whitefloor
01:02:04
hi 請問這個PR還有需要改進的地方嗎
Julian Chu
01:12:36
approved了, 我會建議下次 re-request a PR review , 這樣 reviewer才會知道你完成了
whitefloor
01:35:21
好的,感謝
whitefloor
01:51:13
原來還有這種功能,我以為push之後在issue的member都會看到XD
Julian Chu
02:33:01
會看到啊 只是不能確定修改完成了沒XD
陳昱廷
11:54:42
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/88|#88> • close #0 *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/90|#90> *:pick: 變更內容 / Details of Changes* 修正 lint 跟合併了 development
陳昱廷
11:55:06
這個合併好以後就會把兩條線合再一起
陳昱廷
17:01:01
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/90|#90> *:pick: 變更內容 / Details of Changes* 二合一
- ❤️1
- ✅1
2021-03-16
陳昱廷
15:52:54
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/110|#110> *:pick: 變更內容 / Details of Changes* 增加註解
- 👀1
陳昱廷
15:53:14
之前的註解討論我另開了一個 pr 修正
陳昱廷
15:53:30
舊的因為大改版我關掉了
陳昱廷
15:53:39
直接從這邊重新討論
pichuchen
22:14:51
目前 pttbbs 有使用的 config flag 有
```
> USE_COOLDOWN
> HOTBOARDCACHE
> NOKILLWATERBALL```
這三個,另外目前台大機房似乎還不支援IPv6,尚未有時程表。
```
> USE_COOLDOWN
> HOTBOARDCACHE
> NOKILLWATERBALL```
這三個,另外目前台大機房似乎還不支援IPv6,尚未有時程表。
2021-03-17
Wombat007
00:54:47
@chihhao.wang007 has joined the channel
陳昱廷
16:36:56
註解的部分大家覺得是要都用 // 還是用 /**/ 還是混用?
gogog22510
2021-03-18 05:25:57
我覺得可以function裡面用//, function外用/**/
pichuchen
2021-03-18 11:36:36
目前我沒有看到文件是說哪邊建議用 /**/ 的
gogog22510
2021-03-18 11:40:15
go source code 好像都是 // 可能就用//囉
可
2021-03-18
gogog22510
05:25:57
我覺得可以function裡面用//, function外用/**/
pichuchen
11:36:36
目前我沒有看到文件是說哪邊建議用 /**/ 的
pichuchen
11:37:12
借問一下,有建議的取得磁碟剩餘空間的作法嗎?
gogog22510
2021-03-19 12:27:44
不知道這個可不可以
https://stackoverflow.com/questions/20108520/get-amount-of-free-disk-space-using-go
我公司也是用類似的作法
https://stackoverflow.com/questions/20108520/get-amount-of-free-disk-space-using-go
我公司也是用類似的作法
pichuchen
2021-03-20 08:47:28
我有看到這篇,後來我實作的方法是直接call df -h (不是在這個專案)
pichuchen
11:37:15
golang
pichuchen
11:37:48
我還滿驚訝在 runtime package 裡面居然沒有...
gogog22510
11:40:15
go source code 好像都是 // 可能就用//囉
陳昱廷
11:40:46
可
2021-03-19
gogog22510
12:27:44
不知道這個可不可以
https://stackoverflow.com/questions/20108520/get-amount-of-free-disk-space-using-go
我公司也是用類似的作法
https://stackoverflow.com/questions/20108520/get-amount-of-free-disk-space-using-go
我公司也是用類似的作法
陳昱廷
18:08:38
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/go-bbs/issues/39|#39> *:pick: 變更內容 / Details of Changes* OpenFavFile 錯誤處理 增加對 ReadUserFavoriteRecordsFile test
- ✅1
陳昱廷
18:08:44
大家幫忙 review 一下
2021-03-20
pichuchen
08:47:28
我有看到這篇,後來我實作的方法是直接call df -h (不是在這個專案)
craftwar
13:02:33
@craftwar.open has joined the channel
pichuchen
14:32:48
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/137|#137> *:memo: 相關的 issue / Related Issues* • <https://github.com/Ptt-official-app/Ptt-backend/issues/137|#137> *:pick: 變更內容 / Details of Changes* • delivery/http/route.go • delivery/http/route_boards.go 中新增 getBoardSettings、marshalBoardHeaderSettings
- 👍1
pichuchen
15:21:25
2021-03-22
陳昱廷
09:33:38
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/Ptt-backend/issues/110|#110> *:pick: 變更內容 / Details of Changes* 增加註解
陳昱廷
09:35:28
*:clap: 解決掉的 issue / Resolved Issues* • close <https://github.com/Ptt-official-app/go-bbs/issues/39|#39> *:pick: 變更內容 / Details of Changes* OpenFavFile 錯誤處理 增加對 ReadUserFavoriteRecordsFile test
- 👀1
陳昱廷
09:35:33
這兩個再麻煩大家了
2021-03-23
2021-03-29
pichuchen
09:32:30
*實作細節 / Details of Implement* • 修改 internal/usecase/user.go • 修改GetUserPreferences內的data • 修改 internal/repsitory/user.go • 新增dummy function給usecase *期程 / Schedule* • 討論時間: 兩天, 到 3/25 • 實作時間: 兩天, 到 3/27 • 確認時間: 兩天, 到 3/29 *相關文件 / Documents* 主issue: <https://github.com/Ptt-official-app/Ptt-backend/issues/62|#62> <https://docs.google.com/document/d/18DsZOyrlr5BIl2kKxZH7P2QxFLG02xL2SO0PzVHVY3k|PTT 後端系統協定>
pichuchen
13:10:24
看板細部資訊的 usecase 和 repository 好像已經好了?
nickyanggg
2021-03-29 13:27:39
恩恩 看起來應該是直接用之前寫好的就行
pichuchen
13:10:32
*實作細節 / Details of Implement* 根據目前架構,應該分成 `delivery/http` `usecase` `repository` 三個子 ISSUE 下去實作。 ☑︎ http 部分請依照文件實作並且有初步的 testcode。 • ISSUE <https://github.com/Ptt-official-app/Ptt-backend/issues/137|#137> ☐ usecase 部分應該是直接將 repository 的結果輸出即可。 ☐ repository 因為 go-bbs 可能還沒完成,因此需要先 mock 一個暫時性的結果等待 go-bbs 完成之後進行串接。 注意這個 ISSUE 指的是「細部資訊」 `/v1/boards/{{board_id}}/settings` *期程 / Schedule* • 討論時間: 一週, 到 3/9 • 實作時間: 一週, 到 3/16 • 確認時間: 一週, 到 3/23 *相關文件 / Documents* <https://docs.google.com/document/d/18DsZOyrlr5BIl2kKxZH7P2QxFLG02xL2SO0PzVHVY3k|PTT 後端系統協定>
nickyanggg
13:27:39
恩恩 看起來應該是直接用之前寫好的就行
2021-03-30
pichuchen
18:00:40
最近好像整體進度變慢很多,不知道目前大家有什麼意見想提出來討論的?
2021-03-31
陳昱廷
15:44:19
*實作細節 / Details of Implement* 目前的話,readme.md 皆是以歷史背景出發點再說的。 開發者對於如何參與這個專案是一頭霧水的。 目前我個人看法是應該直接把 milestone 擺在顯眼的地方,並且每個 isssue 都應該要確實的 assign 給某個要接的人。 避免出現明明這個 issue 有人再做卻要看討論才知道。 然後應該要把時程表放在顯眼的地方,哪邊做了哪邊沒做,方便開發者知道目前進度。 *期程 / Schedule* 無,討論到大家滿意為止 *相關文件 / Documents* README.md
陳昱廷
15:44:41
最近比較忙,上星期有提到這件事情
陳昱廷
15:44:51
所以我弄了一些建議給大家討論