Search in sources :

Example 1 with Plan

use of com.wplatform.ddal.dbobject.table.Plan in project jdbc-shards by wplatform.

the class Optimizer method testPlan.

private boolean testPlan(TableFilter[] list) {
    Plan p = new Plan(list, list.length, condition);
    double costNow = p.calculateCost(session);
    if (cost < 0 || costNow < cost) {
        cost = costNow;
        bestPlan = p;
        return true;
    }
    return false;
}
Also used : Plan(com.wplatform.ddal.dbobject.table.Plan)

Example 2 with Plan

use of com.wplatform.ddal.dbobject.table.Plan in project jdbc-shards by wplatform.

the class Optimizer method calculateBruteForceSome.

private void calculateBruteForceSome() {
    int bruteForce = getMaxBruteForceFilters(filters.length);
    TableFilter[] list = new TableFilter[filters.length];
    Permutations<TableFilter> p = Permutations.create(filters, list, bruteForce);
    for (int x = 0; !canStop(x) && p.next(); x++) {
        // find out what filters are not used yet
        for (TableFilter f : filters) {
            f.setUsed(false);
        }
        for (int i = 0; i < bruteForce; i++) {
            list[i].setUsed(true);
        }
        // fill the remaining elements with the unused elements (greedy)
        for (int i = bruteForce; i < filters.length; i++) {
            double costPart = -1.0;
            int bestPart = -1;
            for (int j = 0; j < filters.length; j++) {
                if (!filters[j].isUsed()) {
                    if (i == filters.length - 1) {
                        bestPart = j;
                        break;
                    }
                    list[i] = filters[j];
                    Plan part = new Plan(list, i + 1, condition);
                    double costNow = part.calculateCost(session);
                    if (costPart < 0 || costNow < costPart) {
                        costPart = costNow;
                        bestPart = j;
                    }
                }
            }
            filters[bestPart].setUsed(true);
            list[i] = filters[bestPart];
        }
        testPlan(list);
    }
}
Also used : TableFilter(com.wplatform.ddal.dbobject.table.TableFilter) Plan(com.wplatform.ddal.dbobject.table.Plan)

Aggregations

Plan (com.wplatform.ddal.dbobject.table.Plan)2 TableFilter (com.wplatform.ddal.dbobject.table.TableFilter)1