Closed dragon0170 closed 5 years ago
type으로 되어있는 부분 qualifier로 수정해주세요~
아래와 같은 struct type을 추가하여 사용하면 될 듯.
type TimestampStruct struct {
Id []byte `json:"id"`
Value int64 `json:"value"`
}
type MetaStruct struct {
Id []byte `json:"id"`
UserKey []byte `json:"userKey"`
Qualifier string `json:"qualifier"`
}
type DataStruct struct {
Id []byte `json:"id"`
Value []byte `json:"value"`
}
type MetadataResponse struct {
Timestamp []TimestampStruct `json:"timestamp"`
Meta []MetaStruct `json:"meta"`
}
type RealdataResponse struct {
Timestamp []TimestampStruct `json:"timestamp"`
Meta []MetaStruct `json:"meta"`
Data []DataStruct `json:"data"`
}
이거 적용 일정이 어떻게 될까요?
이거 오늘 적용가능합니다
https://github.com/paust-team/paust-db/issues/41#issuecomment-451868964 TimestampStruct value 부분 int64 -> uint64로 수정해서 사용합니다 DataStruct -> RealDataStruct로 수정해서 사용해도 괜찮겠죠 @dragon0170
@dragon0170 @code-to-gold @elon0823 RealDataStruct라는 이름의 struct가 추가되면서 기존 RealData라는 이름의 struct와 혼동이 있는데, 기존 RealData struct이름을 RealDataReq로 수정하면 어떨까요? 참고로 기존 RealData라는 이름의 struct는 오로지 write request시에 만 사용됩니다.
잠시만요 그전에 response 구조가 저렇게 되기로 했었나요? timestamp까지 저렇게 하는건 아닌것 같은데...
@dragon0170 저번에 찍은 사진 있어요?
@co1god 이거 meta, data 만 구분하고, timestamp는 안으로 들어가야 하지 않을까요?
https://github.com/paust-team/paust-db/issues/41#issuecomment-454261572 struct 관련한 request, response 주고받는 오브젝트들을 Obj, Item 같은 접미사로 통일 시키고 Read/Write 에 대한 것인지에도 구분할 수 있도록 네이밍을 하는 것에 대한 이슈 작성이 필요해보입니다.
@code-to-gold 음... TimestampStruct가 밖에 빠져나와있는건 좋은데 timestamp를 위한 값이 아니라 Key를 위한 값입니다.
제 생각에 KeyStruct를 만들고 그 안에 Timestamp를 정의하구요. Meta, Data => 안에 KeyStruct를 공통으로 가지고 있으면 좋을것같습니다.
그리고 저기 위에 JSON으로 정의한것은 그냥... 콘솔에서 보여주기위한 용도니까 크게 신경 안쓰셔도 됩니다.
1/16 논의 후 바뀐 구조에 따라 types.go 파일 내의 type을 바꿔보았습니다.
type WRealDataObj struct {
Timestamp uint64 `json:"timestamp"`
UserKey []byte `json:"userKey"`
Qualifier []byte `json:"qualifier"`
Data []byte `json:"data"`
}
type WRealDataObjs []WRealDataObj
type MetaDataObj struct {
UserKey []byte json:"userKey"
Qualifier []byte json:"qualifier"
}
type KeyObj struct {
Timestamp uint64 json:"timestamp"
}
type RowKey []byte type RowKeys []RowKey
type RMetaDataQueryObj struct {
Start uint64 json:"start"
End uint64 json:"end"
}
type RRealDataQueryObj struct {
Keys RowKeys json:"keys"
}
type RMetaDataResObj struct {
Key RowKey json:"key"
UserKey []byte json:"userKey"
Qualifier []byte json:"qualifier"
}
type RMetaDataResObjs []RMetaDataResObj
type RRealDataResObj struct {
Key RowKey json:"key"
Data []byte json:"data"
}
type RRealDataResObjs []RRealDataResObj
바뀐 metadata/realdata query의 JSON object 예시는 아래와 같습니다.
```json
# RMetaDataQueryObj
{
"start":1546507007394725000,
"end":1546507024832737000
}
# RMetaDataResObj
[
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMDczOTQ3MjUwMDB9", "userKey":"Pe8PPI4Mq7kJIjDJjffoTl6s5EezGQSyIcu5Y2KYDaE=", "qualifier": "LCBleGNlZWRzIHRoZSBzaG9ydC"},
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMDc1OTQ3MjUwMDB9", "userKey":"UQPTpLQUifnKY0+QvHHkDey51qOou4YVKbENtCraiQ4=", "qualifier": "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5"},
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMTczOTQ3NDgwMDB9", "userKey":"UQPTpLQUifnKY0+QvHHkDey51qOou4YVKbENtCraiQ4=", "qualifier": "LCBleGNlZWRzIHRoZSBzaG9ydC"}
]
# RRealDataQueryObj
{
"keys":[
"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMDczOTQ3MjUwMDB9",
"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMTczOTQ3NDgwMDB9"
]
}
# RRealDataResObj
[
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMDczOTQ3MjUwMDB9", "data":"YWJj"},
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMTczOTQ3NDgwMDB9", "data":"dGVzdA=="}
]
RRealDataQueryObj
가 단순히 []RowKey
인 경우도 가능하겠네요. 윗 comment랑 아래 구조 중 어느게 나을까요?
# RRealDataQueryObj
[
"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMDczOTQ3MjUwMDB9",
"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMTczOTQ3NDgwMDB9"
]
client에서 Query response를 보여줄 때는 client 내에서 byte array를 Key struct로 deserialize한 결과를 보여줘야 timestamp 정보를 바로 확인할 수 있을 것 같습니다.
# client가 server로부터 받는 실제 RRealDataResObj
[
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMDczOTQ3MjUwMDB9", "data":"YWJj"},
{"key":"eyJ0aW1lc3RhbXAiOjE1NDY1MDcwMTczOTQ3NDgwMDB9", "data":"dGVzdA=="}
]
[ {"key":{"timestamp":1546507007394725000}, "data":"YWJj"}, {"key":{"timestamp":1546507017394748000}, "data":"dGVzdA=="} ]
UserKey에서 Ownerkey로 바꿔주는 게 좋을 것 같아요
RowKey라는 이름이 realdata fetch시에는 어울리지 않는 것 같아요. 후에 rocksdb를 사용하지 않을 테니.. SerializedKeyObj가 적당할 것 같아요
fetch 시 keyObj 만으로 조회하니 두 번째 가 더 간결하고 좋은 것 같아요
현재 Context에서는 row key가 맞으니 rowkey로 가는게 좋을것 같습니다.
https://github.com/paust-team/paust-db/issues/41#issuecomment-455412170 두 번째 방식으로 reqQuery를 만들 시 저희만의 serialization, deserialization rule이 필요하므로 json형식으로 작업하는 게 좋을 것 같습니다
Write query에 대한 json object 예시도 있으면 좋을 것 같습니다
ABCI query response value 구조 변경
metadata, realdata에 대한 query의 response value에 id를 추가하고 timestamp, metadata, realdata를 구분하여 출력하도록 변경.
id는 첫번째 prototype에만 보여주는 용도로 사용이 되고 추후에 사라질 예정
realdata query 경우의 AS IS, TO BE 예시는 아래와 같다.
AS IS
TO BE