1.4.4自适应发送算法

抽象的

讨论NDB集群和NDB API中的交易处理和传输的机制,以及用于实现这些的对象。

使用事务使用时ndbtransaction :: execute(),它们不会立即转移到NDB内核。相反,事务保存在特殊的发送列表(缓冲区)中NDB.他们所属的对象。自适应发送算法决定何时应将事务实际转移到NDB内核。

NDB API被设计为多线程接口,因此通常希望一次从多个线程传输数据库操作。NDB API会跟踪哪个NDB.对象在将信息传送到NDB内核和预期的线程数以与NDB内核交互的过程中。请注意,给定的实例NDB.应该在最多的一个线程中使用;不同的线程应该是不是分享相同NDB.目的。

有四种条件导致数据库操作转移NDB.对象缓冲区到NDB内核:

  1. NDB传输函数(TCP / IP或共享内存)决定缓冲区已满并将其发送关闭。缓冲区大小取决于实现,并且可以在NDB群集版本之间发生变化。当TCP / IP是运输器时,缓冲区尺寸通常为64 kB。自从各自NDB.对象提供每个数据节点的单个缓冲区,概念满的缓冲区是每个数据节点的本地。

  2. 转移信息上的统计数据的累积可能强制向所有存储节点发送缓冲区(即,当所有缓冲区都满)。

  3. 每10毫秒,特殊传输线程检查是否发生了任何发送活动。如果没有,则线程将强制传输到所有节点。这意味着20毫秒是数据库操作在派遣之前等待的最大时间。在未来的NDB集群版本中可能有10毫秒的限制;检查比操作系统更频繁的频繁。

  4. 对于受自适应发送算法影响的方法(例如ndbtransaction :: execute()),有一个力量在这方面覆盖其默认行为的参数并强制立即传输到所有节点。有关更多信息,请参阅单个NDB API类列表。

上面列出的条件可能会在未来的NDB集群版本中进行更改。