In Kassandra, each row (addressed by a key) contains one or more columns. Columns themselves are key pairs. Column names do not have to be predefined, i.e. The structure is not fixed. Columns in a row are stored in sorting order according to their keys (names).
In some cases, you may have a very large number of columns per row (for example, to act as an index to include specific types of query). Cassandra can handle such large structures efficiently, and you can get specific ranges of columns.
There is another level of structure (not so often used) called super-columns, where the column contains nested (sub) columns.
You can imagine the general structure as a nested hash table / dictionary with 2 or 3 key levels.
Regular column family:
row col col col ... val val val ...
Super Series:
row supercol supercol ... (sub)col (sub)col ... (sub)col (sub)col ... val val ... val val ...
There are also higher-level structures β column families and key spaces β that can be used to separate or group your data.
See also this question: Cassandra: what is a column
Or data modeling links from http://wiki.apache.org/cassandra/ArticlesAndPresentations
Re: comparison with document-oriented databases - the latter usually insert whole documents (usually JSON), while in Cassandra you can access individual columns or supercolumns and update them individually, i.e. work at a different level of detail. Each column has its own timestamp / version (used to coordinate updates across a distributed cluster).
Cassandra column values ββare just bytes, but can be entered as ASCII, UTF8 text, numbers, dates, etc.
Of course, you could use Cassandra as a primitive document repository by inserting columns containing JSON, but you will not get all the features of a real document-centric repository.