小编Sim*_*non的帖子

RDS MySQL 见解:热门查询“commit”

我们正在尝试通过性能洞察来减少 AWS RDS 实例上的负载。

洞察中列出的最上面的 SQL 语句是“commit”:

影响数据库负载的主要 sql 语句

特别是,commit 语句大部分时间都处于“init”状态:

等待提交语句的状态

当按状态查看总体负载时,这个“init”状态确实构成了负载的很大一部分:

按等待状态划分的总体数据库负载

因此,现在我们不太确定从这些信息中可以得到什么。

  1. 首先,我们启用了自动提交。此“COMMIT”语句是否包含自动提交配置中的自动 COMMIT 语句,还是仅在我们的应用程序执行事务时专用于显式 COMMIT 语句?
  2. 我检查了更多,似乎这个“init”状态与数据库将二进制日志刷新到磁盘有关(https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html)。这可能是有道理的,因为我们有sync_binlog=1我们的主人。但这个猜测是否正确,或者是否还涉及更多内容?
  3. 如果是这种情况,我阅读了有关调整sync_binlog(例如sync_binlog = 0或sync_binlog> 1)的信息,但在硬件故障的情况下风险更大(https://aws.amazon.com/blogs/database/best-practices- for-configuring-parameters-for-amazon-rds-for-mysql-part-2-parameters-related-to-replication/)。对于这一部分,我不清楚在使用一个主服务器和一些只读副本扩展 RDS 时什么是好的做法:在主服务器上进行此设置是标准做法,还是我们应该更多地关注减少我们正在处理的事务量从应用程序执行?
  4. 运行时我能够看到这些“COMMIT”语句停留在初始化状态SHOW FULL PROCESSLIST。但是,我想知道是否有一种方法可以查看与该 COMMIT 语句相关的查询。否则,似乎我们必须猜测什么交易是根本原因。

mysql performance load commit amazon-rds

8
推荐指数
1
解决办法
4778
查看次数

将函数指针转换为void(*)(),然后重铸为原始类型

这个问题仅用于测试目的,仅此而已.

我目前正在尝试使用不同数量的参数存储函数指针(这些参数可以有不同的类型).

基本上,我在C++ 11中编写了以下代码片段:

#include <functional>
#include <iostream>

void fct(int nb, char c, int nb2, int nb3) {
  std::cout << nb << c << nb2 << nb3 << std::endl;
}

template <typename... Args>
void call(void (*f)(), Args... args) {
  (reinterpret_cast<void(*)(Args...)>(f))(args...);
}

int main(void) {
  call(reinterpret_cast<void(*)()>(&fct), 42, 'c', 19, 94);
}
Run Code Online (Sandbox Code Playgroud)

我将void(*)(int, char, int, int)函数指针转换为通用void(*)()函数指针.然后,通过使用可变参数模板参数,我只需将函数指针重新设置为其原始类型,并使用一些参数调用该函数.

此代码编译并运行.大多数时候,它显示出良好的价值.但是,这段代码在Mac OS下给我一些Valgrind错误(关于未初始化的值),它有时会显示一些意外的垃圾.

==52187== Conditional jump or move depends on uninitialised value(s)
==52187==    at 0x1004E4C3F: _platform_memchr$VARIANT$Haswell (in /usr/lib/system/libsystem_platform.dylib)
==52187==    by 0x1002D8B96: __sfvwrite (in …
Run Code Online (Sandbox Code Playgroud)

c++ pointers function-pointers c++11

7
推荐指数
1
解决办法
2843
查看次数

函数既指向成员函数的指针又指向const成员函数的指针

我有以下代码库:

template <typename Type>
class SomeClass {
public:
    template <typename ReturnType, typename... Params>
    void register_function(const std::pair<std::string, ReturnType (Type::*)(Params...)> fct) {
        auto f = [fct](Params... params) -> ReturnType { return (Type().*fct.second)(std::ref(params)...); }
        // ...
    }
};
Run Code Online (Sandbox Code Playgroud)

当我将指针传递给成员函数(非const)时,这种方法有效.但是,如果我想传递指向const成员函数的指针,则会导致编译错误,我必须复制上述函数才能获得此代码:

template <typename Type>
class SomeClass {
public:
    template <typename ReturnType, typename... Params>
    void register_function(const std::pair<std::string, ReturnType (Type::*)(Params...)> fct) {
        auto f = [fct](Params... params) -> ReturnType { return (Type().*fct.second)(std::ref(params)...); }
        // ...
    }

    template <typename ReturnType, typename... Params>
    void register_function(const std::pair<std::string, ReturnType (Type::*)(Params...) const> …
Run Code Online (Sandbox Code Playgroud)

c++ member-function-pointers function-pointers member-functions c++11

6
推荐指数
1
解决办法
184
查看次数

Android和iOS:如何在构建SDK时处理依赖项

我目前正在开发一个可在Android和iOS平台上使用的SDK.

对于Android,我们在Gradle文件中列出依赖项,并使用Maven提供SDK(因此我们的依赖项列在.pom文件中).

对于iOS,我们使用cocoapods来处理dependendies.

问题如下:*我们的SDK在版本X中使用依赖关系*我们的客户端之一可能使用相同的依赖关系但在版本Y*另一个客户端也可能在版本Z中使用完全相同的依赖关系

因此,这导致我们的SDK可能在我们的一个客户端(如果不是两个)上被破坏,因为我们确保它适用于依赖关系X,而不是Y和Z.

目前,遗留代码只是导入了导致此问题的库的源代码并将其命名为,这样就模拟了我们不使用相同的库.

但在我看来,这不是一个适当的解决方案:我们没有最新的修复,更新是痛苦的,客户端有两倍的库而不是一个.

所以,就目前而言,我正在考虑一个潜在的好解决方案,但无法在Google上找到我想要的东西(也许我没有使用正确的关键字:/).

我在想的是为每个依赖项提供一系列版本的支持.有点像"如果此方法在这里,执行它,否则,使用以前版本的方法"(如iOS上的选择器响应).然后,客户端应该能够在支持范围内的条件下使用任何版本的依赖项.

但是,我不知道这是不是正确的方法?还有其他解决方案吗?

谢谢 :)

sdk dependencies android ios

5
推荐指数
1
解决办法
403
查看次数

ActiveRecord,方法链接和请求执行

我目前正在尝试理解ActiveRecord如何工作以链接条件方法然后执行sql请求.

理解方法链接非常简单,我想到的一切都很好地解释并在这里重新开始.

但是,我仍然无法弄清楚,上面的文章没有解释:ActiveRecord如何知道何时执行SQL请求.

例如,如果我编写代码User.where(some_column: "hello").limit(5),ActiveRecord将实例化查询构建器,请设置有关some_column值和有限数量结果的条件.

但是,在执行之后 .limit(5),它还会执行请求并返回结果:ActiveRecord如何知道?怎么知道它是最终的条件方法,它需要返回一个结果?它是否在每个链接条件下执行SQL请求?

在我上面发布的文章中,作者通过调用最终方法来进行欺骗,该方法each正在执行请求并返回结果.

ruby activerecord ruby-on-rails method-chaining ruby-on-rails-4

4
推荐指数
1
解决办法
631
查看次数

OpenCV 在多边形中查找点的最有效方法

我有一个 500 cv::Point 的数据集。

对于每个点,我需要确定该点是否包含在由凹多边形建模的 ROI 中。这个多边形可以非常大(大多数时候,它可以包含在 100x400 的边界框中,但也可以更大)

对于该数量的点和该多边形的大小,确定点是否在多边形中的最有效方法是什么?

  • 使用 pointPolygonTest openCV 函数?
  • 使用 drawContours 构建蒙版并查找蒙版中的点是白色还是黑色?
  • 其他解决方案?(我真的想要准确,所以凸多边形和边界框被排除在外)。

c++ optimization opencv

4
推荐指数
1
解决办法
3505
查看次数

成员函数的模板专业化

我最近template specialization在C++中发现过.

template <typename T>
void    fct(void) {}

template <>
void    fct<int>(void) {}

int main(void) {
  fct<int>();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想对类中的成员函数使用模板专门化.

class   MyClass {
  public:
    template <typename T>
    static void fct(void) {}

    template <>
    static void   fct<int>(void) {}
};

int     main(void) {
  MyClass::fct<int>();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,编译时g++给出了以下错误:

error: explicit specialization in non-namespace scope ‘struct MyClass’
error: template-id ‘toto<int>’ in declaration of primary template
Run Code Online (Sandbox Code Playgroud)

我注意到,模板特化可以在主范围或命名空间中工作,但不能在结构或类中工作.

我在stackoverflow上发现了一些关于使用命名空间的内容,如下面的代码所示:

namespace myNameSpace {
  template <typename T>
  void fct(void) {}

  template <> …
Run Code Online (Sandbox Code Playgroud)

c++ templates

3
推荐指数
1
解决办法
241
查看次数

SQLite 左连接 + 分组依据 + 排序依据

我正在将 SQLite 用于 Android 应用程序。

我有两个表:主题和消息。我想选择所有主题以及该主题的消息数和该主题的最后一条消息作为单个请求(使用子查询)。

我尝试了以下方法:

SELECT topic.*, COUNT(message.id), message.* FROM topic
LEFT JOIN (SELECT * FROM message ORDER BY message.ts DESC) AS message
ON topic.id=message.topic_id
GROUP BY topic.id;
Run Code Online (Sandbox Code Playgroud)

当我在服务器端的 MySQL 上尝试时,这个查询工作得非常好。但是,它在带有 SQLite 的 Android 应用程序上无法按预期工作:我获得了所有主题和正确数量的消息,但最后一条消息不是最新的消息(似乎子查询中的 ORDER BY 没有用) 。

有什么提示吗?

编辑:message.ts 是一个 TEXT NOT NULL,包含格式为“yyyy-MM-dd HH:mm:ss.SSS”的 ts。当我查询所有消息并按 ts 排序时,顺序是好的。

sqlite android join android-sqlite

2
推荐指数
1
解决办法
1032
查看次数

C++二进制表达式的操作数无效

我在C++ 11中遇到了一个奇怪的编译错误.

我有一个模板化的类来定义一个枚举类:

template <typename Type>
class stats {
public:
  // ...
  enum class stat {
    AVERAGE = (1 << 0),
    STANDARD_DERIVATION = (1 << 1),
    // ...
  };
  // ...
};
Run Code Online (Sandbox Code Playgroud)

我目前想在按位运算中使用这个枚举.

例如,以下是该枚举的用法示例:

 template <typename Type>
 void
 stats<Type>::build(stat stats) {
     if (stats & stat::AVERAGE)
         this->build_average();

     if (stats & stat::STANDARD_DEVIATION)
         this->build_standard_deviation();

     if (stats & stat::PERCENTILES)
         this->build_percentiles();

     if (stats & stat::LIMITS)
         this->build_limits();
 }
Run Code Online (Sandbox Code Playgroud)

我们可以在这里调用这个函数stats.build(stat::AVERAGE | stat::LIMITS).

为了在枚举上使用&|运算符而不必每次都手动转换为int,我已经定义了运算符:

template<typename T>
using stat_t = typename eip::stats<T>::stat;

template …
Run Code Online (Sandbox Code Playgroud)

c++ enums compilation bitwise-operators c++11

0
推荐指数
1
解决办法
1179
查看次数