Я хотел бы сохранить частоту, с которой слова встречаются друг с другом в различных контекстах в большом (> 1 миллиарда токенов) текстовом корпусе. Мне нужно сохранить пару слов, тип совпадения (например, слово1 в том же предложении, что и слово2, слово1 в том же абзаце, что и слово2) и некоторые метаданные о тексте, в котором было обнаружено совпадение (например, год, автор, издатель). Таким образом, одна строка может выглядеть так:
word1 word2 count decade publisher author context_type
-------------------------------------------------------------
nuclear danger 22 1980s NYT n/a paragraph
Частоты будут редкими и распределенными по Пуассону. Затем я хотел бы иметь возможность запрашивать данные по диапазонам дат или группам авторов (например), суммируя количество результатов.
У меня мало опыта работы с базами данных, и я не уверен, что использовать. Нужны ли мне связанные таблицы SQL (например, с метаданными книги в одной таблице и данными слов в другой) или простое плоское решение NoSql? Словарь составляет около 50 000 слов, так что если бы каждое слово-слово наблюдалось, было бы 2,5 миллиарда строк даже без метаданных (я думаю). Но, наверное, большинство из них не будет соблюдаться. Это заставляет меня думать, что, возможно, графическая база данных - возможное решение. Есть ли хорошее облачное решение на AWS или в Google?


Google Cloud Bigtable или другая система NoSQL могут быть разумным выбором для этого типа запроса, поскольку это звучит как вариант с разреженным набором данных, но, как отмечалось ранее, этот вопрос больше подходит для https://softwareengineering.stackexchange.com/.
Вероятно, вы можете сделать это довольно легко, используя реляционную базу данных. У вас будет несколько десятков миллионов строк (я предполагаю), и при правильной структуре запрос будет легко выполнить. Однако Stack Overflow - не место для рекомендаций по программному обеспечению.