Thank you, Bhaskar!
Yes, Go Simple API 3 times faster comparing with Go Easy API.
And Go Simple API 3 times slower comparing with native M code for inserting.
time ./speedYSimple
real 0m4,391s
user 0m4,250s
sys 0m0,570s
If we move some operations per cycle, then
time ./speedYSimple1
real 0m3,425s
user 0m3,296s
sys 0m0,458s
=== Code of speedYSimple.go: =====
const maxglnamelen uint32 = 8
const maxglsubscount uint32 = 1
const maxglsubslen uint32 = 10 //128
const tptoken uint64 = yottadb.NOTTP
func main() {
var glname yottadb.KeyT
var errstr, value yottadb.BufferT
value.Alloc(maxglsubslen)
errstr.Alloc(yottadb.YDB_MAX_ERRORMSG)
glname.Alloc(maxglnamelen, maxglsubscount, maxglsubslen)
defer yottadb.Exit()
defer glname.Free()
defer errstr.Free()
defer value.Free()
s := ""
for i := 1; i < 1000000; i++ {
s = strconv.Itoa(i)
glname.Varnm.SetValStr(tptoken, &errstr, "^hello")
glname.Subary.SetElemUsed(tptoken, &errstr, maxglsubscount)
glname.Subary.SetValStr(tptoken, &errstr, 0, s)
value.SetValStr(tptoken, &errstr, s)
glname.SetValST(tptoken, &errstr, &value)
}
}
=== Code of speedYSimple1.go: =====
const maxglnamelen uint32 = 8
const maxglsubscount uint32 = 1
const maxglsubslen uint32 = 10 //128
const tptoken uint64 = yottadb.NOTTP
func main() {
var glname yottadb.KeyT
var errstr, value yottadb.BufferT
value.Alloc(maxglsubslen)
errstr.Alloc(yottadb.YDB_MAX_ERRORMSG)
glname.Alloc(maxglnamelen, maxglsubscount, maxglsubslen)
defer yottadb.Exit()
defer glname.Free()
defer errstr.Free()
defer value.Free()
glname.Varnm.SetValStr(tptoken, &errstr, "^hello")
glname.Subary.SetElemUsed(tptoken, &errstr, maxglsubscount)
s := ""
for i := 1; i < 1000000; i++ {
s = strconv.Itoa(i)
glname.Subary.SetValStr(tptoken, &errstr, 0, s)
value.SetValStr(tptoken, &errstr, s)
glname.SetValST(tptoken, &errstr, &value)
}
}