如何在应用程序端记录cassandra查询?

ca1c2owp  于 2021-06-14  发布在  Cassandra
关注(0)|答案(2)|浏览(346)

我在应用程序中使用gocql驱动程序。驱动程序是否有办法在控制台上记录查询?如何配置记录器以打印完整的查询(以及数据绑定)

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gocql/gocql"
  5. )
  6. var Session *gocql.Session
  7. type Emp struct {
  8. id string
  9. firstName string
  10. lastName string
  11. age int
  12. }
  13. func init() {
  14. var err error
  15. cluster := gocql.NewCluster("localhost")
  16. cluster.Keyspace = "cms"
  17. Session, err = cluster.CreateSession()
  18. if err != nil {
  19. panic(err)
  20. }
  21. fmt.Println("cassandra init done")
  22. }
  23. func main() {
  24. e := Emp{
  25. id: "1",
  26. firstName: "John",
  27. lastName: "DOe",
  28. age: 88,
  29. }
  30. createEmp(e)
  31. }
  32. func createEmp(emp Emp) {
  33. fmt.Println("****Creating new emp****\n", emp)
  34. if err := Session.Query("INSERT INTO emps(empid, first_name, last_name, age) VALUES(?, ?, ?, ?)",
  35. emp.id, emp.firstName, emp.lastName, emp.age).Exec(); err != nil {
  36. fmt.Println("Error while inserting Emp")
  37. fmt.Println(err)
  38. }
  39. }
jc3wubiy

jc3wubiy1#

go驱动程序有一个queryobserver,您可以实现它来执行时间查询:https://github.com/gocql/gocql/blob/master/session.go#l1891-1926年
它将由您检查执行时间是否超过阈值,然后根据需要打印,但它似乎让您可以访问语句对象、主机和计时,这是调试所需的全部内容。
下面是一些示例代码,显示了queryobserver在为推测性执行的影响计时的上下文中的操作:https://github.com/instaclustr/sample-gocql-speculative-execution/blob/master/spectest.go
以上示例来自以下关于推测执行的博客文章:https://www.instaclustr.com/speculative-query-executions-gocql/
(如果存在尾部延迟问题,可能应该考虑使用客户端推测执行,但这是另一个主题:)
此外,树中还有一个使用queryobserver进行验证的测试用例:https://github.com/gocql/gocql/blob/16cf9ea1b3e28090d416d36528f304e4553e6b56/cassandra_test.go#l140
可能是一个好地方开始玩它。

bf1o4zei

bf1o4zei2#

这就是我们在java中的实现方式。我们定义了一个定制的latencytracker:

  1. private LatencyTracker getLatencyTracker() {
  2. return new LatencyTracker() {
  3. @Override
  4. public void update(Host host, Statement statement, Exception e, long l) {
  5. LOGGER.info(statement.toString());
  6. }
  7. @Override
  8. public void onRegister(Cluster cluster1) {
  9. }
  10. @Override
  11. public void onUnregister(Cluster cluster1) {
  12. }
  13. };
  14. }

然后在群集中注册:

  1. cluster.register(getLatencyTracker());
展开查看全部

相关问题