1. 14 3月, 2017 1 次提交
  2. 23 11月, 2016 1 次提交
    • Y
      Unified InlineSkipList::Insert algorithm with hinting · dfb6fe67
      Yi Wu 提交于
      Summary:
      This PR is based on nbronson's diff with small
      modifications to wire it up with existing interface. Comparing to
      previous version, this approach works better for inserting keys in
      decreasing order or updating the same key, and impose less restriction
      to the prefix extractor.
      
      ---- Summary from original diff ----
      
      This diff introduces a single InlineSkipList::Insert that unifies
      the existing sequential insert optimization (prev_), concurrent insertion,
      and insertion using externally-managed insertion point hints.
      
      There's a deep symmetry between insertion hints (cursors) and the
      concurrent algorithm.  In both cases we have partial information from
      the recent past that is likely but not certain to be accurate.  This diff
      introduces the struct InlineSkipList::Splice, which encodes predecessor
      and successor information in the same form that was previously only used
      within a single call to InsertConcurrently.  Splice holds information
      about an insertion point that can be used to levera
      Closes https://github.com/facebook/rocksdb/pull/1561
      
      Differential Revision: D4217283
      
      Pulled By: yiwu-arbug
      
      fbshipit-source-id: 33ee437
      dfb6fe67
  3. 17 11月, 2016 1 次提交
  4. 16 11月, 2016 1 次提交
  5. 28 10月, 2016 1 次提交
  6. 01 10月, 2016 1 次提交
    • A
      Store range tombstones in memtable · 6009c473
      Andrew Kryczka 提交于
      Summary:
      - Store range tombstones in a separate MemTableRep instantiated with ColumnFamilyOptions::memtable_factory
      - MemTable::NewRangeTombstoneIterator() returns a MemTableIterator over the separate MemTableRep
      - Part of the read path is not implemented yet (i.e., MemTable::Get())
      
      Test Plan: see unit tests
      
      Reviewers: wanning
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D62217
      6009c473
  7. 25 8月, 2016 1 次提交
  8. 13 7月, 2016 1 次提交
    • J
      Miscellaneous performance improvements · efd013d6
      Jay Edgar 提交于
      Summary:
      I was investigating performance issues in the SstFileWriter and found all of the following:
      
      - The SstFileWriter::Add() function created a local InternalKey every time it was called generating a allocation and free each time.  Changed to have an InternalKey member variable that can be reset with the new InternalKey::Set() function.
      - In SstFileWriter::Add() the smallest_key and largest_key values were assigned the result of a ToString() call, but it is simpler to just assign them directly from the user's key.
      - The Slice class had no move constructor so each time one was returned from a function a new one had to be allocated, the old data copied to the new, and the old one was freed.  I added the move constructor which also required a copy constructor and assignment operator.
      - The BlockBuilder::CurrentSizeEstimate() function calculates the current estimate size, but was being called 2 or 3 times for each key added.  I changed the class to maintain a running estimate (equal to the original calculation) so that the function can return an already calculated value.
      - The code in BlockBuilder::Add() that calculated the shared bytes between the last key and the new key duplicated what Slice::difference_offset does, so I replaced it with the standard function.
      - BlockBuilder::Add() had code to copy just the changed portion into the last key value (and asserted that it now matched the new key).  It is more efficient just to copy the whole new key over.
      - Moved this same code up into the 'if (use_delta_encoding_)' since the last key value is only needed when delta encoding is on.
      - FlushBlockBySizePolicy::BlockAlmostFull calculated a standard deviation value each time it was called, but this information would only change if block_size of block_size_deviation changed, so I created a member variable to hold the value to avoid the calculation each time.
      - Each PutVarint??() function has a buffer and calls std::string::append().  Two or three calls in a row could share a buffer and a single call to std::string::append().
      
      Some of these will be helpful outside of the SstFileWriter.  I'm not 100% the addition of the move constructor is appropriate as I wonder why this wasn't done before - maybe because of compiler compatibility?  I tried it on gcc 4.8 and 4.9.
      
      Test Plan: The changes should not affect the results so the existing tests should all still work and no new tests were added.  The value of the changes was seen by manually testing the SstFileWriter class through MyRocks and adding timing code to identify problem areas.
      
      Reviewers: sdong, IslamAbdelRahman
      
      Reviewed By: IslamAbdelRahman
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D59607
      efd013d6
  9. 26 4月, 2016 1 次提交
    • I
      Improve BytewiseComparatorImpl::FindShortestSeparator · 7c14abf2
      Islam AbdelRahman 提交于
      Summary:
      The current implementation find the first different byte and try to increment it, if it cannot it return the original key
      we can improve this by keep going after the first different byte to find the first non 0xFF byte and increment it
      
      After trying this patch on some logdevice sst files I see decrease in there index block size by 8.5%
      
      Test Plan: existing tests and updated test
      
      Reviewers: yhchiang, andrewkr, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba
      
      Differential Revision: https://reviews.facebook.net/D56241
      7c14abf2
  10. 21 4月, 2016 1 次提交
    • A
      Add per-level compression ratio property · 73a847ef
      Andrew Kryczka 提交于
      Summary:
      This is needed so we can measure compression ratio improvements
      achieved by D52287.
      
      The property compares raw data size against the total file size for a given
      level. If the level is empty it should return 0.0.
      
      Test Plan: new unit test
      
      Reviewers: IslamAbdelRahman, yhchiang, sdong
      
      Reviewed By: sdong
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D56967
      73a847ef
  11. 02 4月, 2016 1 次提交
    • A
      No need to limit to 20 files in UpdateAccumulatedStats() if options.max_open_files=-1 · cc87075d
      Aaron Gao 提交于
      Summary:
      There is a hardcoded constraint in our statistics collection that prevents reading properties from more than 20 SST files. This means our statistics will be very inaccurate for databases with > 20 files since additional files are just ignored. The purpose of constraining the number of files used is to bound the I/O performed during statistics collection, since these statistics need to be recomputed every time the database reopened.
      
      However, this constraint doesn't take into account the case where option "max_open_files" is -1. In that case, all the file metadata has already been read, so MaybeInitializeFileMetaData() won't incur any I/O cost. so this diff gets rid of the 20-file constraint in case max_open_files == -1.
      
      Test Plan:
      write into unit test db/db_properties_test.cc - "ValidateSampleNumber".
      We generate 20 files with 2 rows and 10 files with 1 row.
      If max_open_files !=-1, the `rocksdb.estimate-num-keys` should be (10*1 + 10*2)/20 * 30 = 45. Otherwise, it should be the ground truth, 50.
      {F1089153}
      
      Reviewers: andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: andrewkr, dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D56253
      cc87075d
  12. 05 3月, 2016 1 次提交
    • S
      Change Property name from "rocksdb.current_version_number" to... · 294bdf9e
      sdong 提交于
      Change Property name from "rocksdb.current_version_number" to "rocksdb.current-super-version-number"
      
      Summary: I realized I again is wrong about the naming convention. Let me change it to the correct one.
      
      Test Plan: Run unit tests.
      
      Reviewers: IslamAbdelRahman, kradhakrishnan, yhchiang, andrewkr
      
      Reviewed By: andrewkr
      
      Subscribers: leveldb, dhruba
      
      Differential Revision: https://reviews.facebook.net/D55041
      294bdf9e
  13. 02 3月, 2016 1 次提交
  14. 10 2月, 2016 1 次提交
  15. 03 2月, 2016 1 次提交
    • A
      Eliminate duplicated property constants · 284aa613
      Andrew Kryczka 提交于
      Summary:
      Before this diff, there were duplicated constants to refer to properties (user-
      facing API had strings and InternalStats had an enum). I noticed these were
      inconsistent in terms of which constants are provided, names of constants, and
      documentation of constants. Overall it seemed annoying/error-prone to maintain
      these duplicated constants.
      
      So, this diff gets rid of InternalStats's constants and replaces them with a map
      keyed on the user-facing constant. The value in that map contains a function
      pointer to get the property value, so we don't need to do string matching while
      holding db->mutex_. This approach has a side benefit of making many small
      handler functions rather than a giant switch-statement.
      
      Test Plan: db_properties_test passes, running "make commit-prereq -j32"
      
      Reviewers: sdong, yhchiang, kradhakrishnan, IslamAbdelRahman, rven, anthony
      
      Reviewed By: anthony
      
      Subscribers: dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D53253
      284aa613
  16. 22 1月, 2016 1 次提交
  17. 21 1月, 2016 1 次提交
    • A
      Split db_test.cc (part 1: properties) · eceb5cb1
      Andrew Kryczka 提交于
      Summary:
      Moved all the tests that verify property correctness into a separate
      file. The goal is to reduce compile time and complexity of db_test. I didn't
      add parallelism for db_properties_test, even though these tests were
      parallelized in db_test, since the file is small enough that it won't matter.
      
      Some of these moves may be controversial since it's hard to say whether the
      test is "verifying property correctness," or "using properties to verify
      rocksdb's correctness." I'm interested in any opinions.
      
      Test Plan: ran db_properties_test, also waiting on "make commit-prereq -j32"
      
      Reviewers: yhchiang, IslamAbdelRahman, sdong
      
      Reviewed By: sdong
      
      Subscribers: dhruba, leveldb
      
      Differential Revision: https://reviews.facebook.net/D52995
      eceb5cb1