1. A method of using a plurality of distributed computing nodes each comprising a processor and associated storage to dynamically block, comprising: (a) grouping together records of a data set with similar properties into blocks; and (b) for a block that is intractably large and therefore requires further blocking, automatically discovering based on the contents of the intractably large block, sets of shared properties that enable creation of sub-blocks of tractable size.