Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-1040

support query using metadata cache

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 3.0.0
    • None
    • None

    Description

      I have use case like : select * from t where ROW = ? (ROW is primary key),so it just a hbase get.
      and it turn out a single query will do two RPCs for metadata, they are all calling to

          public static ColumnResolver getResolverForQuery(SelectStatement statement, PhoenixConnection connection)
          		throws SQLException {
          	List<TableNode> fromNodes = statement.getFrom();
              if (fromNodes.size() == 1)
                  return new SingleTableColumnResolver(connection, (NamedTableNode)fromNodes.get(0), true);
      

      as you can see "SingleTableColumnResolver(connection, (NamedTableNode)fromNodes.get(0), true)", the third parameter is hard coded to true, which means it never use cache. for performance, we let the query use metadata cache, our test show 30% improvement on RT in our use case.

      in our patch, we do:
      1. add an timer based updater at the global cache (the one in ConnectionQueryServices)
      2. the phoenixconnection doesn't have it's own cache, it has a reference to global cache instead

      i'm looking forward for your advice, thanks

      Attachments

        1. PHOENIX-1040.PATCH
          29 kB
          mengqingyi

        Activity

          People

            Unassigned Unassigned
            daniel.M mengqingyi
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: