When performing batch writes using TableEditor, the getColumn() method is called frequently. However, the current implementation uses a linear foreach loop to search for the column by name, resulting in an O(n) time complexity per call. This causes a significant performance bottleneck when dealing with large datasets.
public function getColumn(string $name): Column
{
$name = strtolower($name);
foreach ($this->header->columns as $column) {
if ($column->name === $name) {
return $column;
}
}
throw new \Exception("Column $name not found");
}
Every call iterates through the entire $this->header->columns array.
Suggested Solution
To optimize this, I suggest building an associative map (hash map) when the header is initialized or columns are added. This would reduce the lookup time complexity to O(1).
for example:
// When building/initializing the header
protected array $columnMap = [];
public function addColumn(Column $column): void
{
$this->header->columns[] = $column;
$this->columnMap[strtolower($column->name)] = $column;
}
public function getColumn(string $name): Column
{
$name = strtolower($name);
if (!isset($this->columnMap[$name])) {
throw new \Exception("Column $name not found");
}
return $this->columnMap[$name];
}
When performing batch writes using TableEditor, the getColumn() method is called frequently. However, the current implementation uses a linear foreach loop to search for the column by name, resulting in an O(n) time complexity per call. This causes a significant performance bottleneck when dealing with large datasets.
Every call iterates through the entire $this->header->columns array.
Suggested Solution
To optimize this, I suggest building an associative map (hash map) when the header is initialized or columns are added. This would reduce the lookup time complexity to O(1).
for example: