List of usage examples for org.apache.hadoop.util.bloom Key Key
public Key(byte[] value)
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); }