In this thesis, we give efficient algorithms and near-tight lower bounds for the following problems in the streaming model. Improving on the works of Monemizadeh and Woodruff from SODA\u2710 and Andoni, Krauthgamer and Onak from FOCS\u2711, we give Lpβ-samplers requiring O(epsilonβplog2n) space for pin(1,2). Our algorithm also works for pin[0,1], taking tildeO(epsilonβ1log2n) space. As an application of our sampler, we give an O(log2n) space algorithm for finding duplicates in data streams, improving the algorithms of Gopalan and Radhakrishnan from SODA\u2709. Given a stream that consists of a pattern of length m and a text of length n, the pattern matching problem is to output all occurrences of the pattern. Improving on the results of Porat and Porat from FOCS\u2709, we give a O(lognlogm) space algorithm that works entirely in the streaming model. Finally we show several near-tight lower bounds for the above problems through new results in communication complexity