Sampling Techniques for Boolean Satisfiability