title: What NoSQL data store to use for 3 billion rows dominated by writes
body: <p>I want users to view, and search, the titles of pages they visited on my site, from any device.<br>
  Given the requirements below, <strong>which NoSQL would do the job and would make users happy</strong>?<br>
  Data sizing: 3 Billion rows (6M users, keeping a history of 500 titles/user).  ~1.5TB.  </p>
  
  <p>row/document structure: [ userId(GUID), pageId(GUID), viewedTime, pageTitle(max 160 chars)  ]<br>
  <strong>Writes</strong> (expected write rate: 2,000 viewed pages/sec):<br>
  When a page is viewed by a user, A new row will be created, unless the user previously viewed the page, and I'll just update the viewedTime of an existing row.</p>
  
  <p><strong>Queries</strong> (expected query rate: 300/sec):<br>
   1. Retrieving 100-500 most recent titles by userId (the scanning for a keyword with String.indexOf()).<br>
   2. Retrieving a row by userId AND pageID.
   3. Cleanup - A batch job to reduce to 500 titles per userId by removing the older ones.  </p>
  
  <p>Notes:  </p>
  
  <ul>
  <li>Would be happy for a Store that includes a caching layer.  </li>
  <li>I'm okay with an occasional data lose. And fine with eventual consistency.  </li>
  <li>The amount of data might grow x10 so I need to be able to scale (therefore horizontal scalability?)</li>
  <li>There are millions of distinct pages, so to avoid a join I thought keep the title in each row.</li>
  </ul>