@@ -23,6 +23,68 @@ import (
2323
2424// === Helper Functions ===
2525
26+ func CalculateItemSize (item map [string ]types.AttributeValue ) int {
27+ totalSize := 0
28+
29+ for attributeName , attributeValue := range item {
30+ // Add attribute name size
31+ totalSize += len (attributeName )
32+
33+ // Add attribute value size
34+ totalSize += calculateAttributeValueSize (attributeValue )
35+ }
36+
37+ return totalSize
38+ }
39+
40+ func calculateAttributeValueSize (av types.AttributeValue ) int {
41+ switch v := av .(type ) {
42+ case * types.AttributeValueMemberS :
43+ return len (v .Value )
44+ case * types.AttributeValueMemberN :
45+ return len (v .Value )
46+ case * types.AttributeValueMemberB :
47+ return len (v .Value )
48+ case * types.AttributeValueMemberBOOL :
49+ return 1
50+ case * types.AttributeValueMemberNULL :
51+ return 1
52+ case * types.AttributeValueMemberSS :
53+ size := 0
54+ for _ , s := range v .Value {
55+ size += len (s )
56+ }
57+ return size
58+ case * types.AttributeValueMemberNS :
59+ size := 0
60+ for _ , n := range v .Value {
61+ size += len (n )
62+ }
63+ return size
64+ case * types.AttributeValueMemberBS :
65+ size := 0
66+ for _ , b := range v .Value {
67+ size += len (b )
68+ }
69+ return size
70+ case * types.AttributeValueMemberL :
71+ size := 0
72+ for _ , item := range v .Value {
73+ size += calculateAttributeValueSize (item )
74+ }
75+ return size
76+ case * types.AttributeValueMemberM :
77+ size := 0
78+ for key , value := range v .Value {
79+ size += len (key ) // Nested attribute name
80+ size += calculateAttributeValueSize (value )
81+ }
82+ return size
83+ default :
84+ return 0
85+ }
86+ }
87+
2688// runBatchPutGetCycle performs a BatchWriteItem-BatchGetItem cycle with 25 items and measures performance
2789func (b * DBESDKBenchmark ) runBatchPutGetCycle (data []byte ) (float64 , float64 , error ) {
2890 ctx := context .Background ()
0 commit comments