Example usage for org.apache.hadoop.util.bloom Key Key

List of usage examples for org.apache.hadoop.util.bloom Key Key

Introduction

In this page you can find the example usage for org.apache.hadoop.util.bloom Key Key.

Prototype

public Key(byte[] value) 

Source Link

Document

Constructor.

Usage

From source file:org.wso2.siddhi.core.table.RDBMSEventTable.java

License:Open Source License

@Override
public boolean contains(AtomicEvent atomicEvent, ConditionExecutor conditionExecutor) {

    PredicateTreeNode predicate = null;/*from  w ww .j  a v  a 2  s.c  o  m*/

    if (bloomFiltersEnabled) {
        // bloom filters used only for the equal conditions.
        predicate = conditionExecutor.constructPredicate(atomicEvent, tableDefinition,
                new SQLPredicateBuilder());
        ArrayList<PredicateToken> tokenList = new ArrayList<PredicateToken>(3);
        predicate.populateTokens(tokenList);

        // looking for two sided equals conditions (operators) only.
        if (tokenList.size() < 4) {
            // not using bloom filters for complex conditions
            for (int operatorIndex = 1; operatorIndex < tokenList.size() - 1; operatorIndex++) {

                // at this level the operator becomes '=' instead of '=='
                if (tokenList.get(operatorIndex).getGetTokenType() == PredicateToken.Type.OPERATOR
                        && tokenList.get(operatorIndex).getTokenValue().trim().equals("=")) {

                    // param and value can be in any order i.e. price = 3 or 1 = price. this is to handle such scenarios.
                    String param = tokenList.get(operatorIndex - 1)
                            .getGetTokenType() == PredicateToken.Type.VARIABLE
                                    ? tokenList.get(operatorIndex - 1).getTokenValue().trim()
                                    : tokenList.get(operatorIndex + 1).getTokenValue().toString().trim();
                    String value = tokenList.get(operatorIndex - 1)
                            .getGetTokenType() == PredicateToken.Type.VARIABLE
                                    ? tokenList.get(operatorIndex + 1).getTokenValue().toString().trim()
                                    : tokenList.get(operatorIndex - 1).getTokenValue().trim();

                    for (int i = 0; i < attributeList.size(); i++) {
                        if (attributeList.get(i).getName().equals(param)) {
                            boolean mightContain = bloomFilters[i].membershipTest(new Key(value.getBytes()));

                            if (!mightContain) {
                                return false;
                            }
                        }
                    }
                }
            }
        }
    }

    if ((cachedTable != null) && cachedTable.contains(atomicEvent, conditionExecutor)) {
        return true;
    } else {
        Connection con = null;
        PreparedStatement statement = null;
        try {
            initializeConnection();

            if (predicate == null) {
                predicate = conditionExecutor.constructPredicate(atomicEvent, tableDefinition,
                        new SQLPredicateBuilder());
            }
            con = dataSource.getConnection();
            // need to construct this each time since there are multiple queries and their predicates differ.
            statement = con.prepareStatement("SELECT * FROM " + fullTableName + " WHERE "
                    + predicate.buildPredicateString() + " LIMIT 0,1");
            ArrayList paramList = new ArrayList();
            predicate.populateParameters(paramList);
            for (int i = 0; i < paramList.size(); i++) {
                populateStatement(statement, i + 1, paramList.get(i));
            }
            ResultSet resultSet = statement.executeQuery();

            boolean contains = false;
            long timestamp = System.currentTimeMillis();

            while (resultSet.next()) {
                contains = true;
                if (cachedTable != null) {

                    Object[] data = new Object[attributeList.size()];
                    for (int i = 0; i < attributeList.size(); i++) {
                        switch (attributeList.get(i).getType()) {
                        case BOOL:
                            data[i] = resultSet.getBoolean(attributeList.get(i).getName());
                            break;
                        case DOUBLE:
                            data[i] = resultSet.getDouble(attributeList.get(i).getName());
                            break;
                        case FLOAT:
                            data[i] = resultSet.getFloat(attributeList.get(i).getName());
                            break;
                        case INT:
                            data[i] = resultSet.getInt(attributeList.get(i).getName());
                            break;
                        case LONG:
                            data[i] = resultSet.getLong(attributeList.get(i).getName());
                            break;
                        case STRING:
                            data[i] = resultSet.getString(attributeList.get(i).getName());
                            break;
                        default:
                            data[i] = resultSet.getObject(attributeList.get(i).getName());

                        }
                    }
                    // lazy loading caches since we've already read the event
                    Event event = new InEvent(tableDefinition.getExternalTable().getParameter(PARAM_TABLE_NAME),
                            timestamp, data);
                    cachedTable.add(event);
                } else {
                    break;
                }
            }
            resultSet.close();
            return contains;
        } catch (SQLException e) {
            log.error("Can't read the database table: "
                    + tableDefinition.getExternalTable().getParameter(PARAM_TABLE_NAME), e);
        } catch (Exception e) {
            log.error("Can't connect to the database.", e);
        } finally {
            cleanUpConnections(statement, con);
        }
        return false;
    }
}

From source file:org.wso2.siddhi.core.util.collection.bloomfilter.CountingBloomFilterBasedWindow.java

License:Open Source License

/**
 * Remove and returns or retrieve the last element without removing
 * /*from   w ww.  j av  a  2 s  .  c  om*/
 * @param remove
 *            To remove or not
 */
public ComplexEvent getLast(Boolean remove) {
    if (remove) {
        StreamEvent streamEvent = eventQueue.poll();
        filter.delete(new Key((byte[]) streamEvent.getAttribute(joinAttributeId).toString().getBytes()));
        return streamEvent;
    } else {
        return eventQueue.peek();
    }
}

From source file:org.wso2.siddhi.core.util.collection.bloomfilter.CountingBloomFilterBasedWindow.java

License:Open Source License

/**
 * Search value is initially checked with the filter and if it exists,
 * search through the queue for a matching event. Outputs a matched event
 * list.//from w  w  w .  j av  a2s.c o  m
 * 
 * @param attributeName
 *            Search Attribute
 * @param value
 *            Search value
 * @param foundEventList
 *            Matched event list
 */
public List<ComplexEvent> find(String attributeName, Object value) {

    List<ComplexEvent> foundEventList = new ArrayList<ComplexEvent>();

    Key key = new Key(value.toString().getBytes());

    if (filter.membershipTest(key)) {
        Iterator<StreamEvent> iterator = eventQueue.iterator();

        while (iterator.hasNext()) {
            StreamEvent streamEvent = (StreamEvent) iterator.next();
            if (streamEvent.getAttribute(joinAttributeId).equals(value)) {
                foundEventList.add(streamEvent);
            }
        }
    }
    return foundEventList;
}

From source file:org.wso2.siddhi.core.util.collection.bloomfilter.CountingBloomFilterBasedWindow.java

License:Open Source License

/**
 * Add stream events to the eventQueue and filter
 * //from  w w w  .j  av  a 2 s.c o  m
 * @param streamEvent
 *            Stream type event to add
 */
private void addStreamEvent(StreamEvent streamEvent) {
    eventQueue.add(streamEvent);
    Key key = new Key((streamEvent.getAttribute(joinAttributeId)).toString().getBytes());
    filter.add(key);
}

From source file:org.wso2.siddhi.core.util.collection.bloomfilter.OverlappingBloomFilterBasedWindow.java

License:Open Source License

/**
 * Search value is initially checked with the filters and if it exists,
 * search through the queue for a matching event. Outputs a matched event
 * list./*from   w ww. j a va2 s . c  om*/
 * 
 * @param attributeName
 *            Search attribute
 * @param value
 *            Search value
 * @param foundEventList
 *            Matched event list
 */
public List<ComplexEvent> find(String attributeName, Object value) {

    Key key = new Key(value.toString().getBytes());
    List<ComplexEvent> foundEventList = new ArrayList<ComplexEvent>();

    boolean isInFilters = false;

    for (int i = 0; i <= oldestAddingFilter; i++) {
        if (filterList.get(i).membershipTest(key)) {
            isInFilters = true;
            break;
        }
    }

    if (isInFilters) {
        Iterator<StreamEvent> iterator = eventQueue.iterator();
        while (iterator.hasNext()) {
            StreamEvent streamEvent = iterator.next();
            if (streamEvent.getAttribute(joinAttributeId).equals(value)) {
                foundEventList.add(streamEvent);
            }
        }
    }

    return foundEventList;

}

From source file:org.wso2.siddhi.core.util.collection.bloomfilter.OverlappingBloomFilterBasedWindow.java

License:Open Source License

/**
 * Add stream events to the eventQueue and filters
 * /*from w w w.  j  av  a  2 s  .  c  om*/
 * @param streamEvent
 *            Stream type event to add
 */

private void addStreamEvent(StreamEvent streamEvent) {

    eventQueue.add(streamEvent);

    Key key = new Key((streamEvent.getAttribute(joinAttributeId)).toString().getBytes());

    for (int i = oldestAddingFilter; i <= newestAddingFilter; i++) {
        filterList.get(i).add(key);
        noOfEventList.set(i, noOfEventList.get(i) + 1);
    }

    if (noOfEventList.get(newestAddingFilter) % nonOverLapEvents == 0) {
        filterList.add(new BloomFilter(bloomFilterSize, noOfHash, Hash.MURMUR_HASH));
        noOfEventList.add(0);
        newestAddingFilter++;
    }

    if (noOfEventList.get(oldestAddingFilter) == expectedNoOfEventsPerWindow) {
        oldestAddingFilter++;
    }

}

From source file:org.wso2.siddhi.extension.eventtable.rdbms.DBHandler.java

License:Open Source License

public void buildBloomFilters() {
    CountingBloomFilter[] bloomFilters = new CountingBloomFilter[tableDefinition.getAttributeList().size()];

    for (int i = 0; i < bloomFilters.length; i++) {
        bloomFilters[i] = new CountingBloomFilter(bloomFilterSize, bloomFilterHashFunction, Hash.MURMUR_HASH);
    }//w ww .ja  v  a 2 s  .  c om
    Connection con = null;
    Statement stmt = null;
    try {
        con = dataSource.getConnection();
        stmt = con.createStatement();
        String selectTableRowQuery = constructQuery(tableName,
                elementMappings.get(RDBMSEventTableConstants.EVENT_TABLE_GENERIC_RDBMS_SELECT_TABLE), null,
                null, null, null, null);
        ResultSet results = stmt.executeQuery(selectTableRowQuery);
        while (results.next()) {
            for (int i = 0; i < bloomFilters.length; i++) {
                switch (tableDefinition.getAttributeList().get(i).getType()) {
                case INT:
                    bloomFilters[i].add(new Key(Integer.toString(results.getInt(i + 1)).getBytes()));
                    break;
                case LONG:
                    bloomFilters[i].add(new Key(Long.toString(results.getLong(i + 1)).getBytes()));
                    break;
                case FLOAT:
                    bloomFilters[i].add(new Key(Float.toString(results.getFloat(i + 1)).getBytes()));
                    break;
                case DOUBLE:
                    bloomFilters[i].add(new Key(Double.toString(results.getDouble(i + 1)).getBytes()));
                    break;
                case STRING:
                    bloomFilters[i].add(new Key(results.getString(i + 1).getBytes()));
                    break;
                case BOOL:
                    bloomFilters[i].add(new Key(Boolean.toString(results.getBoolean(i + 1)).getBytes()));
                    break;

                }
            }
        }
        results.close();
        this.bloomFilters = bloomFilters;
        this.isBloomFilterEnabled = true;
    } catch (SQLException ex) {
        throw new ExecutionPlanRuntimeException(
                "Error while initiating blooms filter with db data, " + ex.getMessage(), ex);
    } finally {
        cleanUpConnections(stmt, con);
    }
}

From source file:org.wso2.siddhi.extension.eventtable.rdbms.DBHandler.java

License:Open Source License

public void addToBloomFilters(List<ComplexEvent> eventList) {
    for (ComplexEvent event : eventList) {
        for (int i = 0; i < attributeList.size(); i++) {
            bloomFilters[i].add(new Key(event.getOutputData()[i].toString().getBytes()));
        }//from  w w w  .  j a  v a  2  s . c  o  m
    }
}

From source file:org.wso2.siddhi.extension.eventtable.rdbms.DBHandler.java

License:Open Source License

public void removeFromBloomFilters(ComplexEvent event) {
    for (int i = 0; i < attributeList.size(); i++) {
        bloomFilters[i].delete(new Key(event.getOutputData()[i].toString().getBytes()));
    }//w  ww  .  j  a  va2s  . com
}

From source file:org.wso2.siddhi.extension.eventtable.rdbms.RDBMSOperator.java

License:Open Source License

@Override
public StreamEvent find(ComplexEvent matchingEvent, Object candidateEvents,
        StreamEventCloner streamEventCloner) {

    Object[] obj;//from   w  w w .ja  v  a  2  s  . c om
    if (expressionExecutorList != null) {
        obj = new Object[expressionExecutorList.size()];
        int count = 0;
        for (ExpressionExecutor expressionExecutor : expressionExecutorList) {
            Object value = expressionExecutor.execute(matchingEvent);
            obj[count] = value;
            if (isBloomEnabled) {
                boolean mightContain = dbHandler.getBloomFilters()[attributeIndexArray[count]]
                        .membershipTest(new Key(value.toString().getBytes()));
                if (!mightContain) {
                    return null;
                }
            }
            count++;
        }
    } else {
        obj = new Object[] {};
    }
    return dbHandler.selectEvent(obj, executionInfo);
}