Commit fa4670b
committed
rabbit_khepri: Optimise topic binding projection function
[Why]
Before this patch, the projection function that managed the topic bindings
graph only kept track of "topic word -> topic word" = "this node ID".
Reading and updating this graph was efficient.
However, deleting a node in this graph was expensive because it used
`ets:match/3` to determine if an edge was pointing to nothing and could
be reclaimed. `ets:match()` does a full scan of the table.
On my laptop, this scan took 20 ms with 100k topic bindings, thus >30
minutes to delete all of them.
[How]
The new projection function tracks the number of children a target node
has as well. This way, it knows that if this counter reaches 0, the edge
can be reclaimed.
The same test with 100k topic bindings takes 3.5 seconds to delete them.
(cherry picked from commit 612d93d)1 parent 0b4bb69 commit fa4670b
4 files changed
Lines changed: 160 additions & 75 deletions
File tree
- deps
- rabbit_common/include
- rabbit
- src
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| |||
533 | 533 | | |
534 | 534 | | |
535 | 535 | | |
536 | | - | |
537 | | - | |
| 536 | + | |
| 537 | + | |
538 | 538 | | |
539 | 539 | | |
540 | 540 | | |
| |||
543 | 543 | | |
544 | 544 | | |
545 | 545 | | |
546 | | - | |
| 546 | + | |
547 | 547 | | |
548 | 548 | | |
549 | 549 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
179 | | - | |
| 179 | + | |
| 180 | + | |
180 | 181 | | |
181 | 182 | | |
182 | 183 | | |
| |||
1544 | 1545 | | |
1545 | 1546 | | |
1546 | 1547 | | |
1547 | | - | |
| 1548 | + | |
1548 | 1549 | | |
1549 | 1550 | | |
1550 | 1551 | | |
| |||
1565 | 1566 | | |
1566 | 1567 | | |
1567 | 1568 | | |
1568 | | - | |
| 1569 | + | |
1569 | 1570 | | |
1570 | 1571 | | |
1571 | 1572 | | |
| |||
1615 | 1616 | | |
1616 | 1617 | | |
1617 | 1618 | | |
1618 | | - | |
| 1619 | + | |
1619 | 1620 | | |
1620 | 1621 | | |
1621 | 1622 | | |
1622 | 1623 | | |
1623 | 1624 | | |
1624 | | - | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
1625 | 1636 | | |
1626 | | - | |
1627 | | - | |
1628 | | - | |
| 1637 | + | |
| 1638 | + | |
| 1639 | + | |
| 1640 | + | |
| 1641 | + | |
| 1642 | + | |
| 1643 | + | |
| 1644 | + | |
| 1645 | + | |
| 1646 | + | |
1629 | 1647 | | |
1630 | | - | |
1631 | | - | |
| 1648 | + | |
| 1649 | + | |
| 1650 | + | |
| 1651 | + | |
| 1652 | + | |
| 1653 | + | |
| 1654 | + | |
1632 | 1655 | | |
1633 | 1656 | | |
1634 | 1657 | | |
1635 | 1658 | | |
1636 | | - | |
| 1659 | + | |
1637 | 1660 | | |
| 1661 | + | |
1638 | 1662 | | |
1639 | 1663 | | |
1640 | | - | |
| 1664 | + | |
1641 | 1665 | | |
1642 | 1666 | | |
1643 | 1667 | | |
1644 | | - | |
| 1668 | + | |
1645 | 1669 | | |
| 1670 | + | |
1646 | 1671 | | |
1647 | 1672 | | |
1648 | 1673 | | |
| |||
1666 | 1691 | | |
1667 | 1692 | | |
1668 | 1693 | | |
1669 | | - | |
| 1694 | + | |
1670 | 1695 | | |
1671 | 1696 | | |
1672 | 1697 | | |
1673 | 1698 | | |
1674 | 1699 | | |
1675 | | - | |
1676 | | - | |
1677 | | - | |
1678 | | - | |
1679 | | - | |
1680 | | - | |
1681 | | - | |
1682 | | - | |
1683 | | - | |
1684 | | - | |
1685 | | - | |
1686 | | - | |
1687 | | - | |
1688 | | - | |
1689 | | - | |
1690 | | - | |
1691 | | - | |
1692 | | - | |
| 1700 | + | |
| 1701 | + | |
| 1702 | + | |
| 1703 | + | |
| 1704 | + | |
| 1705 | + | |
| 1706 | + | |
| 1707 | + | |
| 1708 | + | |
| 1709 | + | |
| 1710 | + | |
| 1711 | + | |
| 1712 | + | |
| 1713 | + | |
| 1714 | + | |
| 1715 | + | |
| 1716 | + | |
| 1717 | + | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
1693 | 1721 | | |
1694 | | - | |
1695 | | - | |
1696 | | - | |
1697 | | - | |
1698 | | - | |
1699 | | - | |
1700 | | - | |
1701 | | - | |
1702 | | - | |
1703 | | - | |
1704 | | - | |
1705 | | - | |
| 1722 | + | |
| 1723 | + | |
| 1724 | + | |
| 1725 | + | |
| 1726 | + | |
| 1727 | + | |
| 1728 | + | |
| 1729 | + | |
1706 | 1730 | | |
1707 | | - | |
1708 | | - | |
| 1731 | + | |
| 1732 | + | |
| 1733 | + | |
| 1734 | + | |
| 1735 | + | |
| 1736 | + | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
| 1745 | + | |
1709 | 1746 | | |
1710 | 1747 | | |
1711 | 1748 | | |
1712 | 1749 | | |
1713 | 1750 | | |
1714 | | - | |
1715 | | - | |
1716 | | - | |
1717 | | - | |
1718 | | - | |
1719 | | - | |
1720 | | - | |
| 1751 | + | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
1721 | 1758 | | |
1722 | 1759 | | |
1723 | 1760 | | |
1724 | 1761 | | |
1725 | 1762 | | |
1726 | 1763 | | |
1727 | | - | |
| 1764 | + | |
1728 | 1765 | | |
1729 | 1766 | | |
1730 | | - | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
1731 | 1770 | | |
1732 | | - | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
| 1774 | + | |
| 1775 | + | |
| 1776 | + | |
1733 | 1777 | | |
1734 | 1778 | | |
1735 | 1779 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
485 | 485 | | |
486 | 486 | | |
487 | 487 | | |
488 | | - | |
| 488 | + | |
489 | 489 | | |
490 | 490 | | |
491 | 491 | | |
| |||
507 | 507 | | |
508 | 508 | | |
509 | 509 | | |
510 | | - | |
| 510 | + | |
511 | 511 | | |
512 | 512 | | |
513 | | - | |
514 | | - | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
515 | 541 | | |
516 | 542 | | |
517 | 543 | | |
| |||
554 | 580 | | |
555 | 581 | | |
556 | 582 | | |
557 | | - | |
| 583 | + | |
558 | 584 | | |
559 | 585 | | |
560 | | - | |
561 | | - | |
562 | | - | |
563 | | - | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
564 | 594 | | |
565 | 595 | | |
566 | 596 | | |
| |||
573 | 603 | | |
574 | 604 | | |
575 | 605 | | |
576 | | - | |
577 | | - | |
578 | | - | |
579 | | - | |
580 | | - | |
581 | | - | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
582 | 622 | | |
583 | 623 | | |
584 | 624 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
| 104 | + | |
104 | 105 | | |
105 | 106 | | |
106 | 107 | | |
| |||
0 commit comments