So, we can start the next session. Welcome back everyone for our next talk. Anton is going to be talking about scraping the web. So, let's help. Welcome. Thank you Fabio for the introduction. Beyond scraping, that is the main title. And of course, what is beyond scraping depends on what site you're coming from. And I'm coming from the past. If you look at how scraping was 20 years ago, it was very easy. The way that the web was built up for the user could be easily retrieved in an automatic fashion. But nowadays, that's not possible anymore. You have JavaScript to make the experience much more nice for the end user. And if the data is presented for the end user but not necessarily in a specific way to automate the downloading, it can be very hard to get something done. Before I start with the proper talk, I would like to see some hands. Who's used URL lib from the standard library? Who's used requests? Maybe use the other hands if everyone's around. Who's used beautiful soup, preferably the version 4? Who's Selenium? Slightly less, but still. Who's used 0MQ? Here it gets interesting. And who's used by a virtual display? Okay, good. Still some people. So this is all the exercise you get, unless you want to leave early, of course. The talk is not very technical. You will not see any Python code. But these are the buzzwords. If you glue all this together in the proper way with the right idea behind that, you will be able to scrape current websites, and I would say like 99% of them without too much trouble. Some backgrounds for me. People don't know me beyond that I fold the t-shirts at the Python conference. By education, I'm a computational linguist. Unfortunately, I couldn't do anything with Python during that time because at the time I was writing my thesis, Guido was writing the first Python interpreter. After that, or partly during that, I was doing 3D and 2D computer graphics. And I actually missed an opportunity in 1993 to start using Python. One of the students from the University of Amsterdam who started working for me introduced me to the language, but they already had a C program with two interpreted languages hanging off it, and I didn't want to have a third one in that program. But I liked Python. I actually liked it because of the indentation. A lot of people don't understand that when they first look at Python. Oh, indentation, but I came from using Transputers and Occam 2, and they used indentation and folding editors. So that was fine for me. I did some stuff with Python, and then in 1998, I finally got an opportunity to do something commercial in Python 1.5.2 on Windows and tickle as the graphical use interface. Some people might know me from C implementation from the Order Dictionary by Ford and La Rosa, a very complete Order Dictionary, much more complete than the one in the Standard Library. I re-implemented that in C back in 2007, and that was my first experience with making Python packages. More recently, I picked up YAML parser. It seemed to be kind of dead. I made it into a YAML 1.2-compatible parser, the PyYAML parser, and I started that because I found it kind of strange to have a human readable data format that would throw away the commands when you read it in and wrote it back out. So it's a run-tripping parser. It now does all kinds of extra things, and those are available from PyPI as packages. So scraping the web, what is the actual problem? Well, you want to download information from all kinds of websites, but sometimes you want to state some state. You want to interact with a website and change the state, not necessarily download the data. You already know what is there, but you want to increase your score somewhere or you want to make sure that somebody knows that you visited, although you're actually on holiday and lying on the beach and didn't want to start up your browser. So before I want to go into detail, let's briefly look at web pages so you know what I use for terminology. For me, a web page, coarsely, is a structure of text, a tree structure. The text can have attributes and the text can have data. So if you look at this small example of an HTML file, the tree structure is shown by the indentation. If you use a debugger within your browser, it often indents that for you to actually see what a structure is. Of course, you don't have to write HTML like that. You can write it all behind each other, but it's difficult to look at what a structure is. If you look at the ATAC there, the second from the bottom, it has three attributes, href, id, and class, and it has some data on the other side. Depending on what kind of library you use to go into HTML, you can also say that the other side is data that is associated with body. It sometimes helps to have multiple things together, especially if you have things like italics. You might not just want to have a superior tag and pick up the data from that tag and it often automatically does away with all the intermediate tags. It just puts together the data that you have. A web page maps some URL to some data, and that's often unique, but it might not be unique. You might get something different for URL. We'll look at that later. We are looking at it right now. The old version of changing data is like you use some form data. You submit a form and depending on how you filled out the form, you'll get a different result on the page that you go to, although it's the same URL. What also happens is if you have some state in a cookie that might influence what kind of data you get given a specific URL, and nowadays it's depending a lot on JavaScript, what you actually get in there. You have websites that have only one URL. It never changes, but all the time you get different data depending on your state in the JavaScript that is executed on that single page. Brief interlude. There's different ways of developing software and I just want to touch on that so you understand why I did things the way I did. You can use a complete framework that covers anything that you want to do and learn it and then implement the little part that you want to do within that framework using configuration or writing some code depending on the framework. There's some frameworks for doing web backend development. There's also more framework-like tools that you can use for scraping. The other way is going from the bottom using some existing building blocks and gluing them together with your own code. If you develop like I do for some customer who is interested in getting some results, a framework is not necessarily the best way to go. If the framework exactly does what you need to do and you don't have to change the framework itself, then you might better go with the framework. But if you need to go and dive into the framework and change the 10% of code that you used there, you first have to find the 10% and do the changes and the biggest problem exists in that after running the code for a year and not looking at it, you have completely forgotten about how the framework works so you have a big problem updating your own code and understanding your own changes.  That's the code you wrote yourself in the first place and after a year you're much more likely to understand what you did a year ago. You might have to start from scratch. You might do it in the same way. So I'm going to present something like gluing the building blocks together that I showed you earlier on or that I raised the hands for. Simple websites. Those are the ones you can actually access by using URL2 and request. Sometimes you want to use form data to get actually to the data that you need and especially requests help you do that. If you can get the data that you want with URL2 and haven't used requests, I recommend that you actually look at it. And these libraries, they do some basic stuff for you like redirection. Actually doing things like handing over cookies is more complex and if there's some JavaScript on the side, things really get bad because you have to look at what does the JavaScript do? How can I do that by hand? Can I get data that the JavaScripts do with some URL request and then insert it in the page or directly use it? Cookies are used to keep state and I specifically mentioned them because they often use to preserve your authentication information. Data that is valuable to get off the web might not be available for free, so it's not like you get some URL and you get to the data, you might have to log in first and then be able to proceed to getting the data. The authentication, originally there was some building or there is still some building authentication in your web browser. The building used, it has a very coarse pop-up window where you put like a username and a password. More often, there's some form you have to fill out on your web page and that form, the information from that form on the back end creates some cookie and that is used to keep state. Over the last, I'm not sure exactly how much, seven years and so OpenID has come up which allows you as a web developer to concentrate on getting the information across that you want and not have to write too much of the login code and it has an advantage if you have your website redirect to Yahoo or to Google in that you, if necessary, have some more physical, or you can physically trace the person who logged in because nowadays Google and Yahoo, if you set up a new account we'll ask you for a telephone number where they can send some pin code that you have to type in and for instance in Germany where I'm living now it's not possible to get a telephone account without showing your passport. So some backtrace that is being done and so it might be convenience but it might also be that people want to know that you're a real person and at least have a real, there's some real telephone associated with something. With a person that actually accesses the site. So if a site has JavaScript then URL, lib2 and requests are of little use. But I have done, when things came up with JavaScript I have done these parsing of what JavaScript does by hand but you have to read the JavaScript it's often difficult to trace what it actually does. If you have a browser and compare what you get with URL, lib2 what you see in your browser is normally different but that's of course like you switch off JavaScript in your browser and that is often a good first indication like can I easily scrape the website or do I have to use more advanced tools to get to the data that I want. What JavaScript does, you probably all know is it can update parts of the HTML tree and by requesting additional data from the backend. So why do we do that or why do the web developers do that? It's primarily because it's a nicer user experience and if you don't have to update all of the website you get quicker updates which adds to the nicer user experience and reduces the bandwidth that you need. JavaScript has several downsides from a scraping perspective is that you don't get too easily to the website and that was too fast. There's also a big problem is that the JavaScript you essentially don't know when the page is finished. If you do a URL at two requests or to a page it comes back and you know you have all the data. If you have a page that has JavaScript you have to wait till it's done processing but it might never be done processing. It might wait in a loop or it might have some channel open for additional data to come from the backend and you never know what it stops. So if you can see something in your browser you probably can use Selenium to start that browser and then talk to the browser from Python and get your material out.  You drive the pages and you click on things if that's necessary and fill things out. Selenium originally was used for testing or I used it originally for testing and that is easy. Why is it easy? Because if you test something you made a page and you just have to see if the page actually is what you expect it to be. You already know the structure, what IDs you've used, what classes you've used, do you know how to get to the particular elements in the HTML tree. But the advantage is if you use Selenium that there's never a discrepancy because you're actually using a browser between what you see talking to the Selenium open browser and what a normal user will see. So in principle you can get to anything that a normal user gets. A nice advantage of Selenium is also is because the browser is open if the program is not exited yet because you have a sleep loop or you're waiting for some input. Then you can just start the debugger and you can see what the page looks like, the built-in debugger or firebug, whatever works for you. But the big important thing is that the program has to run. As soon as your program stops, Selenium closes down and it closes down to your browser and you will not be able to see what went wrong because if something went wrong and you try to access an element that is not there in the HTML tree, your program might crash depending of course on how you write it and any useful information that you could get from the browser is gone. You would have to start up a browser externally, go to the page, this structure, what did I expect? Oh, there's a new element there. They changed the back end and tried to get these things. So if you use Selenium, you can do a superset of the URL lib2 and the requests thing that you can do because of all the JavaScript that is handled correctly. And there is a main... there's two main differences but one of the differences is that you don't open a browser and if you use the URL lib, you don't open a browser, you can use URL lib or requests easily from a cron job on a headless server without any problems. That is not possible with Selenium without doing some extra stuff. Selenium opens the browser and the browser needs the window, so you need a desktop. So let's look at these... some more of the problems. Let's take a look at the data where the data is there.  Sometimes you just wait for five seconds because you know in normal situation that things will be there and that you are interested in actually got loaded but if you have a table of elements like there might be three elements already loaded and you don't know how many are going to be there. Is it done loading or not? So the second interlude, we saw that the web page has a structure and there's different ways of getting to a particular piece of data on that web page that you might want to extract. The things you probably want to extract is either data or some attribute value URL to a PDF file or to some other page. You can get at that depending on how the web page is built up by using the ID. The ID should be unique although I've seen several pages especially generated but with Microsoft's CMS systems that had reused the same ID on the same page. At that point I decided not to use the ID because I don't know if the browser and using beautiful soup will actually... the browser might take the first ID and beautiful soup the second it is like let's not use that. Depending on how the web site is structured you can search by class. That is of course if something is colored in a specific way on a specific class you can get one item but it's not necessarily like always the case that these classes are not reused on several positions in the web page that you're looking at. You can programmatically walk over the tree so on the top I have HTML and then I have the body and then I go down, down, down it's not particularly fast and there's something called X-Bat which if you haven't used it yourself it's more or less a regular expression to get to a particular piece of data based on the tag names and some attributes. X-Bat is not very complicated but if you don't use it on a daily basis it's kind of hard to remember how to do things. There's a better reusable option that I tend to use and that's the CSS Select it's not as powerful I think as X-Bat but it's powerful enough for my purposes. It looks like for instance this here it says get any URL that is an HTTPS URL on some site.com but it might be longer the carat actually makes sure that it only has to start with that so the href of an HA element has to have these start with this string and then the A has to be after a div element that has import as a class and there's all kinds of rules like this this kind of thing I think Selenium might not support this but this is a beautiful soup as far as I know it does and there's CSS allows you to get to particular elements at this point like you have the A element and you can as soon as you point to the A element you can get if you're interested in that you can get a URL that is the href attribute CSS select has my preference over X-Bat because I can also use it when I make a website in using the CSS files to actually determine the look and feel of the site but like I said there are restrictions that you have to be aware of both Selenium and beautiful soup don't implement these selections as complete as your browser does so what is a typical Selenium session before we go into how to do it differently you open a browser and go to Senior URL you click the login button we assume that you have to authenticate you wait until the redirection to the open ID provider site is reached you provide your credentials this is of course a whole subject on itself how do you automatically provide credentials you don't want to have everybody read your login name and password there's a few things but one of the simpler ones is make a sub directory in the SSH directory if you're running Linux that has already the restrictions and our checked restrictions on accessibility only by the owner of the files then you have your credentials you wait until you get back to the request page open ID has open ID session has notified your website that everything is okay then you fill out some search criteria to restrict the new or look for new data that has happened or has been added since the last time you checked then you might get a table or a list of items and you click on one of these references in that table and then you're finally there you might be on the final page and get the data from there you're extracting from the HTML or you find a link and the link might be to some files some PDF file or some other file and the main problem with this is that debugging is very time consuming every time you log in and you have to wait and it's like you're not talking about seconds if your program doesn't in the end your program doesn't exactly know how to analyze the structure of the last page where you actually retrieve the file information or the textual data then you have to restart your program and it has to log in again so we're talking about tens of seconds if not a minute before you can get to where you want and if you have a client waiting it's like oh your software is not working anymore this is kind of bad so how can we improve on that that you don't have to restart the Selenium every time one, there's probably several ways but the way I solve this is going into a client server architecture where the server talks with Selenium and my client can just crash or can be restarted and continuing where I left off the server keeps the Selenium session open and that keeps the browser open even if the client crashes to do that you need some protocols how do I set that up it doesn't have to be very sophisticated and you get data to the server which is essentially requests so you get data from the server to the client for analysis and knowing what state the program or the website is in so you can take appropriate action or rewrite your client program to take other appropriate action originally when I set this up a couple of years ago I thought about like oh I'll write some files increasing file name numbers and the server will just look at the directory and I'll get stuff from that but then I looked at 0MQ and it actually allows you to do these kind of things pretty easily it allows you to have a many to one among other things allows you to have a many to one connection between many clients and one server that also allows you to have multiple multiple threads within your client or having and still have one server open using 0MQ it's very it's trivial to get the server site on a different machine using port numbers and specify with machine things are running on if they're not on the local host at 0MQ not by default but it allows sending unicode based exchanges and it is especially easy to get data you might not use like special characters in your protocol but on your website that you download you're almost certain at some point to find non-asky characters and you have to deal with those so you might as well set up the whole thing using unicode so if you look at the thing that we did before the session of getting to some data if you have a client-server-based solution then the thing look slightly different you open the browser but only if it's not already opened you click on the login button but only if you're not logged in yet if you're not logged in yet but you're at the open ID site you don't have to go to the open ID site etc etc you don't have to do things that are already done and you just have to pick up where you left off last time and you have to check for those things so it might just be if the final page with the data has changed that you don't do any of these initial things you just check if they're done and then you directly get your data so your turnaround time in starting your client program goes down from 10 seconds to a minute to part of a second and then you have your data so so if you define a protocol what do you need the protocol sends some command with some parameters and gets a result back so we look at what kind of commands do we need and what kind of parameters do these commands have there's only very few of them you have to be able to open a window and I use a specific window ID for that so I can open multiple windows on the server side if you don't do that you essentially have only one window to work with and it's very difficult to do many to one or have multiple clients running because they would be competing for the same window to do something using that window ID you can say go to some URL and the page will show up in the web browser that Selenium has opened in the meantime the next protocol thing that you need is select some specific item based on an item ID the item ID you can reuse again on a specific page the window ID and then you want to interact with the specific item based on its ID you might want to click on it to have a radio button clicked or to go to some specific link clear input or text area there might already be something where you want to write that's the next thing that you want to do so you might want to clear out the old password that is incorrect and give the new password and then very important return some HTML starting with a particular ID you can of course get the complete HTML page but it's inefficient you often already know like oh I'm only interested in this table you selected the table using Selenium and then you get the whole table back and the other thing that is almost necessary to have is like what is the current URL that I'm looking at because if you go to an open ID page and you say click somewhere you need to know that it actually gets back to your original site to continue working so you want to check want to be able to check have the client check ask the server what is the current URL that we're looking at you can extend this protocol with whatever makes things more efficient this is essentially where I stopped a year and a half ago after adding a few things it might be just be more it might be more efficient to do things on the client's side then push them to the server so you get the HTML back you need to do an analysis of that I used beautiful soup for that it's faster than going over three in Selenium and getting the individual items so of course not useful if you have to click on the items then you still have to do it on the server side like I already indicated it has CSS select support there's one cave at though you get a piece of an HTML page back and beautiful soup wants to have a whole HTML page put this in this string between the curly braces and then you can actually hand it over so the first problem that I solved is with the client's server architectures that your clients can crash and you don't have to start from scratch but the whole thing introduced the problem is that you have to have a head a desktop where you actually start the browser and if you want to run something on a headless server or you don't want to have at some point in time have a browser start while you're typing in some email there's a solution using Pi Virtual Display it creates a virtual it creates a display that you can use to start the browser you will actually not see the display but for debugging purposes you can still get at it if you start a VNC session what I normally do is I don't use the VNC or the Pi Virtual Display back while I'm developing and when it starts running it's fine and if my client crashes anyway I'll use VNC to connect to the Pi Virtual Display startup and then she's like oh the browser stopped because of whatever sometimes you get like stupid things like your website requires you to change your password every six months and you haven't done that so you have to complete different pages than you expected because you never programmed it for that there's different ways of extending this what I already have done is is restrict the advertisements I use the Firefox browser often in the back end by using some configuration that of course loads pages that use it ads much faster what doesn't work with Selenium but it's the client service architecture is capable of is using the tour by starting Firefox with its own extensions that you can drive it with slightly less powerful than Selenium but it's for most purposes is good enough then about the availability of the software like the previous talk software is not yet on Pi Pi I need to remove some stuff from the client side that is proprietary for the clients that I develop some software for and you would recognize where I get scraped the software from so I need to get it out but once it gets up there you'll be able to see it on Pi Pi with using Rulomo browser client and Rulomo browser server and I will also update the YouTube video with that information when this is available so that's also almost the end of my talk I can give some questions now I can also give some real world examples for what I use it not for clients let's do the questions first do the world examples there is a microphone and one, two, hi usually these kind of problems we have when the pages kind of single page application or JavaScript driven and it's usually API right? if there is an API available you might just want to use the API to get the data I am looking at pages that are not designed for don't have an API to get to the data the main problem is that you need to be sure that page is completely loaded let's try to look at some specific element on the page if it's already there or not if the table if you immediately check you might not have the table at all then the table gets there but you don't know if all lines have been loaded so there might be some indication that there's going to be like 15 results and you have a table of 10 items you know that 5 results still need to be loaded and sometimes it's just waiting for hoping that everything arrives in time yeah sure now this with Selenium looks pretty complex and a lot of stuff are used isn't it easier to do something like I don't know sleep one second and check I don't know content of the page or something but you still need to use Selenium to get like is the content there or download the whole page but you also have to request Selenium for that if you don't use Selenium but would go back to like using requests anything that gets loaded by JavaScript you will not get at all because request doesn't handle the JavaScript yeah yeah so it's there's different way of addressing these but it's one problem we had when using Selenium to access data was that these pages sometimes have date pickers and other elements that do not allow you to type in data and these are usually very complicated to automate have you had these problems and do you have ideas to handle these well this actually there's multiple things that you can do I have seen these problems so you have if I recall correctly like there are Selenium calls like just right in this field but there's also Selenium calls where you click somewhere and just sending characters and they you have to make sure that your cursor is at the right position and they will get there I've done that with for instance Khan Academy the website has that kind of problems and you can get around that it's not trivial but you there's different ways of getting the data actually in the and I would have would have to see if the protocol has some option of what of the two to use I don't recall for your talk one problem I got when using one problem I got when using Selenium to do about the same thing not really the same way but same tools is that a lot of people don't want actually the data scrapped so they're using services like Distil Networks Cloudflare that is proxies that will try to detect patterns while scrapping and when they think you're not human they will capture did you encounter this problem one of the reasons to do the client server architecture is that one of the the most frequent things I've seen is that they notice that you log in like seven times a day it's like why is that why doesn't the cookie persist and those kind of things if you know that is one of the examples that I have let's see Stack Overflow like this they will actually detect how often you refresh and restrict that and if you if you want to advance on the queues on the review queues and get like a thousand reviews and get the gold badge you have to do special things and load balance where you're actually looking it depends of course on the site like this is a thief and making a better lock and they will look at the patterns that you're using try to detect it but essentially if you behave like a normal if you have your program behave like a normal person they can hardly kick you out and for me that's for some sites for clients that means I do the scraping it takes two hours but they only want to have it done once a day and they cannot disallow you to like they put up some say 10 references to the 10 PDF files on a day well they can assume that you need to read the PDF and they don't want you to like within five seconds download all the PDF files but if you download one every two minutes you still can provide your client at the end of the day with the 10 PDF files that were uploaded that is the way I handled it I just have my program behave like as if it was a human and that has to be accessible and again yeah that's the second account look at it may I have time for one last question yes I just wanted to add there is some ways to run Selenium headless without using pi virtual display with phantom gs and chromium there is ways to run Selenium headless without using Selenium has some modes where you don't get a browser window the disadvantage is that it's not using a real browser so that might be detected and the other thing is if things go wrong you have nothing to look at you just have your html structure and the nice thing is if you use pi virtual display you use vnc and you see the browser that you would normally be using it's like oh it's in that state it's much more recognizable if it now after 6 months ask you to change your password if you see that you have to change your password instead of getting the html back what is it actually trying to do but that is also possible there are multiple ways of addressing these things but everything has advantages and disadvantages okay thank you Empton thank you very much everyone


We'll do a quick intro and we'll get the discussion started here. Hello and welcome. My name is Shannon Kemp and I'm the Executive Editor of DataVercity. We would like to thank you for joining our second installment of the New Monthly DataVercity Webinar Series, NoSQL Now at Dan McCrary. Today Dan will be discussing optimizing databases for solid state drives with three guest panelists today. Just a couple of points to get us started. Due to the large number of people that attend these sessions, you will be muted during the webinar. For questions, we will be collecting them via the Q&A in the bottom right-hand corner of your screen. Or if you'd like to tweet, we encourage you to share our highlights or questions via Twitter using hashtag NoSQL Now. As always, we will send a follow-up email within two business days containing links to the recording of this session and any additional information requested throughout the webinar. Today we have three esteemed guests joining us joining the panel for the discussion. Dave Rosenthal, Co-Founder of Foundation DB. Brian Bulkowski, Founder and CTO of Aerospike Incorporated. And Tim Callihan, Vice President of Engineering at Tokutek. I think their title won't speak to their impressive resumes. And we're moderating the panel as DataVercity's partner and friend, Dan McCrary. Dan is principal of Kelly McCrary & Associates. He is an enterprise architect and author specializing in emerging database technologies. And he and his wife Anne recently published the book Making Sense of NoSQL, a guide for managers and the rest of us. We can find in the DataVercity book store under featured books. And with that, we'll turn over the floor to Dan to get the discussion started. Hello and welcome. Sorry about that. I forgot to unmute myself. There we go. All right. Hello. I just wanted to reach out and thank our panelists at the NoSQL Now conference. We had three very good presentations done by people that have been pretty much writing their databases from scratch using solid-state data drives. And so I wanted to invite some of the leaders in this area and really talk about why these databases can't just run, can't be modified very quickly to run on solid-state drives. I think there's a lot of very new and very deep technology that these guys are working with. So I'm really honored to have all three of you guys here. We'll just start out going left to right. And we'll have each of you guys just introduce yourselves and maybe just tell us a little bit about how you got into the solid-state drive area. And then we'll go on from there. So, Dave, would you like to get us started off here? Yeah. And thanks for having me. So, yeah, my name is Dave Rosenthal. I'm one of the co-founders and sort of architects and technologists behind FoundationDB. And we've been working on, you know, building a database, as have these other guys for a little over four years now in my case. We sort of designed from day one for SSDs. And when we got started, these Intel X25 drives were sort of just out on the market. And for the first time, you know, SSDs were looking sort of viable. And they had these, you know, some weird characteristics in terms of, you know, write performance versus read performance. And I'm sure we'll get into all of that. But one of the things I think we realized is that you sort of need to design a database a little bit differently to use SSDs than you would a normal rotational disk. So looking forward to the conversation, I personally have done a bunch of the sort of archives testing on various SSDs, you know, you know, bottom of everything on the market. I have a box full of literally hundreds of dead SSDs that we've beaten to the ground. So it's been on. Thanks. All right. Ryan, tell us about yourself and where you're from and what got you into solid-state drives. Thanks, Dan. It's a good opportunity to be able to speak here. And I appreciate it. So I was working at an advertising company back in the 2007-2008. And I really saw an opportunity to help companies cope with scale. I saw people trying to achieve things that were like the front page of Yahoo at the time but trying to do it as a startup with only a few people and really running into a lot of problems. And you could do all that stuff within memory databases at the time, true RAM databases. And that's what really a lot of people do. But solid-state was going to be the coming technology, which was really going to radically change technology. So I'm in my late 40s and I've been, you know, blocked in terms of high performance from doing by storage for a long, long time. We've all been living with seeks being very slow in databases for pretty much most of our lives. So flash is a super exciting technology. And when we looked at the price performance of flash, especially as Dave mentioned with the Intel X25s, there was a lot of possibilities there. I started also then talking to a guy who knew a couple companies back named David Flynn who ended up being one of the founders of Fusion I.O. So he told me a lot about the underlying chip architecture and what firmware had to do for every drive. So we really started optimizing the data structures in our ground-up rewrite at that point. Fantastic. And so for people that don't know about Fusion I.O., there's a company that really does focus on the actual hardware themselves. Is that a good summary? Absolutely. They are one of the preeminent PCIe card flash vendors that really took a look at how to do direct-attach storage in that card. Now, of course, there are many vendors from Violin now has a similar kind of product out. Micron has some great products. We now have the Huawei card on the bench. We're actually very excited about some of that performance. And like Dave, we do a lot of testing. We have a tool called ACT, the Aerospike Certification Tool. We run a lot of drives through that and a lot of configurations, whether it be wide SATA or PCIe for performance. And really try to show where different vendors are in terms of price performance, especially with low latency. Great. Okay. So, Tim, tell us a little bit about yourself and how you got into Celtic Drive. Sure. You know, I did me on Twitter. I called off a database junkie. After graduating college, I was doing debase and clipper early on. I covered Oracle and wrote my first sequel and pledged to not do any more clipper development. I had clipped for a very long time and then went over to VoltPB for a couple years on product management and engineering and really fell in love with the high performance and characteristics of a city and memory database. And then discovered TokuDB a few years later, TokuTech. So what we have here is a technology called Fractal Tree Indexes. And the story from an SSD perspective, I think it's unique on the panel in that DB and the Fractal Tree Indexes themselves were built in a time when writing disks, real rules in SSD was much further down the horizon compared to where it is today. So the Fractal Tree Index, compared to a B-Tree, is all about eliminating unnecessary I-O. Given that the experience of an I-O operation, it was critical to try to avoid that as much as possible. So Fractal Tree were born really to solve the problem with spinning disks. An interesting side effect that we found is the aspects that we baked into the Fractal Tree, number one being compression. SSD, I'm sure we'll talk about this later. SSDs are really expensive. So compressing the data that goes on them, I think, goes a long way toward making them affordable for your standard end user. Another interesting aspect of an SSD is, you can almost say that I-Ops are free. Devices like Fusion I-O can do 100,000 plus I-O operations per second, but they're expensive that come with that I-Op. So you can get the data very quickly, but then you've got to decompress it, deserialize it, put it into the cache, direct other items. So the freedom of an I-Op is kind of deceiving, and when I say free, it's in quotes because I mentioned earlier about compression. They're really expensive devices themselves, or they can be very expensive. And the last piece about our technology is someone earlier mentioned having stacks of drives that they've just run into the ground. Fractal Tree indexes do things that are really interesting. We do infrequent writing, and we write big things, and I think those make our technology very handy-friendly and can eliminate the concerns about wearing out devices before time. Thank you very much, Tim. That's great. So I'm going to go on to a couple of questions, and I guess the format initially is we're going to just do a one-ramored format. We'll pick a question, and then each of you answer it in turn, and then we'll kind of break it up and get more interactive after these first-round events. So let's just start out with why now. Why is it that SSDs are becoming popular now, and why is it that we're seeing a whole new generation of vendors that are actually writing their software from scratch? Dave, do you want to make a shout-out at that initial question? Yeah, I'll take a stab. I'm getting a bit of an echo there, though, so apologies. I think we're becoming popular. I mean, I think we sort of all know the reasons there's a little bit of a problem. So I won't just say that, you know, the price has been coming down and the performance is going up. That's sort of the obvious stuff. One of the interesting things that's happened just over the past maybe a year, from my perspective in the SSD market, is that there's been a lot of maturing of the controller technology on the SSDs to the point where different SSDs from different vendors are finally starting to work pretty well in just one workload of streaming writes or streaming reads or pure random reads or pure random writes. They're starting to work better in real-world workloads of random reads and random writes that are mixed together. And they're also starting to work better in their full. One of the things that's interesting about SSDs is they, and we'll talk about this, normally there's spare capacity that's over-provisioned inside the SSD. And to sort of work well, they need to have some spare capacity to work with. And one of the challenges with existing SSDs is that if you fill them up, they start to work worse and worse, especially for writes. So to me, interesting things about why SSDs are becoming popular in the last couple of years is there's actually been a bit of a convergence around the capabilities of the translation layer and the actual SSD controllers to make it so that different drives are becoming a little bit more commoditized and a little bit more interchangeable. I think we're still in a place as an industry where we as database vendors need to be experts on behalf of our customers about SSDs. But I think sort of rolling forward a few years, hopefully they'll be a little bit more commoditized, much like, for example, 10,000 RPM rotational disk is today. And I'll leave you with that. I think your summary is that it's not just the underlying technology of the solid state memory itself, but it's actually the controllers that have been highly optimized for different workloads since then. Yeah, all the controllers from the different manufacturers are starting to converge in terms of capabilities. I mean, they're not converged, but they're converging in terms of capabilities. And so there's something like one drive's good for one thing and one drive's really good for something else starting to be a little bit more of an equilibrium which makes them interchangeable in the market. So that's really important. All right. Tell us a little about what's your take on it. Why SSDs now and what are the big trends you're seeing? First of all, I'd say that what Dave said there is entirely accurate. We're seeing a lot of the same things. Let's highlight one point about the controller, which is as controller technology has been maturing, we saw basically two or three companies come out like Sandforce and say we are the controller company trying to cut across a lot of different manufacturers. And that was sort of a one-size-fits-all approach. And honestly, I think it was good for the time, but we're starting to surpass that. So the fact that Micron has its own controller and has its own driver, the fact that Intel has basically had two different products for controllers and then one of those was clearly superior and it moved forward. Huawei, again, as I mentioned, has a really interesting controller that's little known in the U.S., but it's their own silicon. Well, at least their own FPGA. Samsung as well has its own controller. So all of these, that's a process that takes years of spinning up the design phase going through multiple revs of controller tech. We're really starting to see the benefit of it. But frankly, I think there's two other issues that really have to be highlighted, and one is simple acceptance. Your friends say, oh, yeah, I installed SSDs. I installed Flash technology. It worked. It didn't burn out. They do seem to be more reliable than rotational disks for this workload. Then that's a mounting range of evidence. As operational people are hearing from their friends that now Flash is working, where the X25 had some problems. It was pretty easy to burn out. It had problems with disconnects and stuff like that. That word of mouth is priceless for the industry. And then the other point is simple price. The range, the difference between what RAM cost and Flash cost, we now have devices like the Crucial M500, which is Micron's consumer brand, currently being priced at half a dollar a gig. We have rumors that Facebook's Exabyte that they are buying is probably around a buck a gig. Apple's big build out rumors I have is also around 50 cents a gig. There's a far cry from the $15 a gig that the early Fusion IO cards cost. We're now seeing the high end of the market in high-sell C drives at about $8 a gig. So price has really plummeted and densities have increased as well as that word of mouth. Ryan, tell us what SLC drives are. Oh, I'm sorry. There are two sort of core technologies. There's a lot of the different chip vendors have some other terms. But the two acronyms to know in Flash chip technology are SLC, which is single-cell, and MLC, which is multi-cell. So MLC drives tend to be quite slower, but also quite a bit denser and cheaper. SLC drives are especially good at high-right endurance as well as high-right throughput. So you tend to see them at different ECB levels. As far as the industry, the industry has really shifted in the last year and a half to be almost entirely MLC-based. Now there's a... I'm sort of drawing some... Imagine me waving my hands a little because there's TLC, which is the Tri-State stuff that Samsung's got out. And Intel has this stuff that they call E-M-L-C, which is also a little different. So there's been some process improvements at the chip guys that they like to highlight, but there's sort of two big families, MLC and SLC. And the SLC drives are currently running 50 cents to three bucks a gig chip price, and that's really rippled throughout the industry. So there's underlying technologies, and each of these underlying technologies have different characteristics for read and write performance. Interesting. Now we're also seeing, just because we're on this topic, the Flash Memory conference down at San Jose a couple months ago, we saw both Samsung and Intel present some very interesting roadmaps that show real legs on SLC... Sorry, flash density. We can expect about 10 years worth of Moore's Law style every 18 months, 2X improvement style. So they've shown some internal, some very believable process improvements that will take us through at least the next factor of 10 to factor of 16 of scaling. That's good news. Tim, tell us your thoughts on why SSD now and what are the trends you're seeing. I've got a thing. I can certainly reiterate price. I think nothing drives adoption more than affordability. If the mass is now, you can get quality if you turn off the shelf devices that are safe to run databases on. If you turn them on later. Maybe some people that are not talking, if you could turn your phones on mute. That's fine. That's fine. Will that be any better? Yeah. That's not all it is. So certainly the braps, some of these, as I'm hearing mentioned, Fugio and others, there's high-end flash devices, PCIe, there's high-end enterprise-grade SSDs, and there's consumer off the shelf of both. You can buy, you know, PCI flash cards that are concentrated in SSDs and kind of roll your own servers with those prices. I think that's changed. There's been a fair amount of uncertainty and doubt about devices wearing out. I think people think about, well, this smart device can only be rewritten each set within the device a thousand times or 2,000 times.  I personally am still scouring the Internet to find evidence that in large quantities these devices are wearing out. And I think we've seen enough of that for that to be as valid as in any reported. But the piece that I can certainly speak to in terms of their experience and usage in the market, the raw performance it brings to your workload. So when you make a product that competes with the NODB storage engine, which is one way to store data, is to see if it's equal. And my SQL, if your database largely fits in memory, it's a very performant database. It tends to slow down quite a bit when the database is larger than RAM. And when you find these flash devices and SSDs doing is really easing the bar for performance in my SQL or MongoDB for that matter when you've got really good performance flash on the background. So rather than going to main memory to get data to operate on it, a flash device that can really improve performance. It's not as good as in memory performance, but it's certainly far better than when going to a spinning disk for your workload. So I find that the biggest thing there is people who are not a lot of money can have a new server that's got better storage, be it SSDs or PDI flashcards, and they might get a 5x performance improvement. Just follow orders. No application change, no substantial changes other than better performance. Because other than better hardware. Right, that makes sense. But I think what we're going to do is we're going to stick with you, Tim, and instead of going from left to right, we'll just continue on another question with Tim and then we'll work backwards. I think one of the things I'm struck with now, we really talked about the underlying technology, but let's just talk about the database itself now. Why is it we can't just take our database as it is and create a new drive and mount our data section on that drive and just turn it on? You guys are spending a huge amount of engineering dollars and research. And I think that you really can't do that. You really are rewriting things. Tim, can you talk a little bit about why you really had to redo things from scratch? I think it's unique on this panel in that way. Our technology existed pre-flash, and there were aspects of our implementation that led themselves to work very well on flash. But there is one area where I can certainly speak to, and it's kind of a challenge in that things that are compared to our competition in the MySQL and Mongo space is really compelling. And we've heard the name Fusion.io kicked around or some of the high-end devices. They're really expensive. And you get a 10-to-1 compression on your data with a live-running transactional processing database, and suddenly you're going to make one-tenth the investment in the flash. So the expensive flash, you contend times as much data, or you spend one-tenth the money to get the same work done. But the challenge with compression, and that's what I can speak to directly here, is moving the problem. So when we did really deep compression in Tokutex, TokuDB, if you had to do an I.O. to bring the data off disk, let's say you'd measure that in the milliseconds, five milliseconds or so, to read a chunk of data off the disk, and with the hardest, the greatest impression, something like LZMA, it might take 40 seconds to decompress that data. So in the pipeline of the operation, if I need to get data off disk, it takes five seconds to read the data, and a couple of orders of magnitude less to actually decompress it. Suddenly, that I.O. is nearly free, so let's say the I.O. is measured in microseconds. Now my decompression takes just longer than the actual I.O. operation. I've kind of moved my bottleneck and the expectation of speed. You know, they get much faster I.O. so they want to go even faster, and then it becomes a challenge of balancing how long you do for compression and how much time you spend and affect the running workload. So it makes for an interesting challenge, and sometimes I'm finding that an easier, lightweight compression algorithm might be better on Flash because of the latency. It's when you do an I.O. So that's the challenge we're facing with the I.O. The decompression and the compression then starts to take over and dominate the access times, and we're really careful about that. The I.O. time has gone from milliseconds to microseconds, and therefore it used to dwarf decompression, and now it is dwarfed by decompression. Okay. You mentioned MySQL and Mongo. You guys basically build a layer of software that serves as an intermediary for people right to Mongo API, for example, but they're in fact using your software as the driver to all the I.O. Is that a good summary? An easier way to think of it is you can think of Toko MX as a fork in lack of a better term of MongoDB. So we started with their source code. With their API, we were fully compatible with the functionality. So Toko MX is the MongoDB. What Toko DB is the MySQL? It's another plug-in alternative. But now you have basically your own code base for people that have a Mongo database can just pull over and use the same API effectively. Exactly. Okay, great. All right, let's go ahead and tell us a little bit about why is it that we can't just take a database designed for spinning disk and have it run on a solid-state drive? Well, first of all, that's a great question. And the short answer is you can. You know, I've mentioned Fusion I.O. a couple of times, but their big selling point was they just said, hey, look, use one of our cards underneath Oracle or MySQL, and guess what? You can make all of your hardware spend and all of your application two to three times faster. Wouldn't it be nice just, you know, sprinkle some magic hardware pixie dust over your databases and not have to increase your Oracle license fee or do anything other than simply install some cards? And that's a wonderful story. Is the ballpark there? But can you do better? Well, exactly. That's the rule of thumb when I've talked to people who have optimized, you know, operations guys. The point is that the number of IOPS in these drives, we've talked about them being free, have moved up from, you know, a rule of thumb for a nice swank recent enterprise drive is maybe 200 IOPS, 200 IOPS per second, to maybe 400 for fast drives if you've, you know, for a rotational disk. And flash devices started out at maybe 10,000 and 20,000 in the early days with the X25 and have moved up to hundreds of thousands today, even for modestly priced drives. So, you know, that's a huge difference to go from 200 to 20,000, right? That's a factor of 100, not a factor of two. So when we looked at building Aerospike, we said what's actually going to unlock all 20,000 of those IOPS? How can we get out of the way? How can we invoke the parallelism necessarily for flash devices?  That's one of the, and so staging, doing elevator optimization algorithms were a big part of rotational drive optimizations for the last 20, 30 years. With flash, you really do have random and parallel access. So the first thing we did was we worked out a very RAM-based indexing scheme that was incredibly efficient because a RAM system will be highly parallel, allows you to get through the index, allows you to actually do writes to that index. If you have to shuffle and rebalance whatever you're doing, you don't have to do different kind of locks if you use a proper lock-free algorithm. So that unlocks then the ability to, at the device level, do multiple reads and writes in parallel and really unlock the throughput of a drive and get yourself up to the full-rated chip throughput of the drive. Those and a few other techniques, such as using streaming writes to the device to make sure it doesn't invoke its own internal garbage collection system, those are some of the techniques we've used as well as parallelism. The goal is really to get the drives running at their full-rated speed according to manufacturer and according to synthetic testing. If you can do that and really get to your hundreds of thousands per second, then you're doing something right and you're going beyond the 2x to 3x of putting your relational system and just dropping it in some new hardware. Interesting. Okay, great. David, do you want to take a crack at that question then? We'll unmute here, David. Yeah, thank you. I was. Yes. I was just commenting on the other panelists on their excellent answers. I'll definitely echo some of the same things. It is awfully disappointing to drop an SSD into a database and make it and have it get two or three times faster. You're sort of like, that's not what I expected. I wanted some zeros at the end of that. So, you know, well, your systems have balanced bottlenecks. And so a lot of engineers, database, 10 years ago balanced bottlenecks between compression and decompression and seeks and scans and all of this stuff. But when you go and move something like three orders of magnitude, it obviously goes out of whack. So, it's taken a little bit of time for everybody to figure that out. I'm drilling in on sort of one of the deeper issues from this. Like, if you ask people like four years ago, how would you take advantage of an SSD in a database?  The answer was to do sort of a log-structured merge style process pattern. Something that does random reads to the flash disk but sort of is aware of the fact that flash can't do small block random writes. It has to actually erase big chunks of flash. So, basically, it has a hard time natively doing random small writes. And so people are saying, well, if you can read randomly from flash and write sequentially to flash and structure your data store in that way, then it will work much better with flash. So, I guess the thing that we had back when we started FoundationDB is that that was not going to be the case forever. That problem of turning random writes into sequential writes using a log-structured techniques was going to ultimately be solved, again, at the controller level, not to harp on the controllers here. And I think that's what we see. So, if you look back to the rotational disk days, they can do random reads and random writes basically at the same speed. And there was some Q-depth effect. Like, for example, the drive might be able to get about three times faster if you get a very, very big list of things to do versus giving it one thing at a time to do. What's been interesting about the evolution of SSDs is as the controllers have improved, internally they're solving some of these log-structured problems. So, today, an SSD does look actually an awful lot like a faster disk. It can do a roughly equal number of random reads and random writes. And the biggest difference is other than just sort of the orders of magnitude of performance is the Q-depth effect. An SSD might be able to run five or even ten times faster if you put a big list of items to read and write. Versus doing one at a time. And from what I've been told about people, you know, to some of these companies that sell these flash memory cards, what we're going to be seeing in the future is even more IOs per second. Again, IOs being free in the flash. But you're going to need to drive more and more concurrency to an actual flash device to get that performance. So, I think in terms of thinking ahead to challenges for us, writing random 4K blocks isn't much of a challenge. But the challenge from us as software vendors is to be able to provide hundreds, potentially, of parallel requests going to one of these flash devices at the same time. Fantastic. So, let me just remind everybody that we're at about 130 here in Midwest and we want everybody to put in questions. They have a panelist here. We have some of the best experts in the field here. So, always good to get some free advice. Then we're going to keep the discussion going for about 20 more minutes, and then we'll open it up for questions. So, I'm going to just kind of open it up now. And if anybody would like to talk about, in any order you guys want, any case studies of industries that are really starting to benefit from this new generation of databases. Anybody just been here, and if you have any case studies that you'd like to mention and some success stories, any industries specifically too? I'm happy to. We've got a lot of these things in production. Do you have any specific industry segments that you guys work on? Oh, yeah. I just wanted to see if the other panelists might want to jump in as well. So, the industry that we've been very successful in is with advertising and marketing technology companies. We're now starting to find some lift within retail sections and companies as well. So, the primary use case is essentially user profile storage and sort of session cookie tracking. These are the cases where you need for, say, advertising optimization or personalization of a web experience you'd like to have maybe 10 terabytes currently online and you want to do that with a very high level of availability and you're doing maybe six billion objects in a table. That seems to be sort of what a lot of our customers are doing somewhere between one and six billion objects per table. And the use is very random across it. So, in cases where it's a very read-centric workload and the working set is small, you'll often find that existing relational technologies are working pretty well. It's really where the working set size is expanding. So, with a flash oriented system like Aerospike, you can say, hey, look, your indexes are in memory. Reasonable cost will actually push, say, 100,000 per machine per node in a clustered system. Right now, the use case of what's called real-time bidding within advertising, advertising optimization, there are nearly hundreds of companies participating in real-time bids for advertising impressions.  Well, that just doesn't go to one computer that has a list of ads and serves you back one. There's a massive infrastructure where let's say that goes to Google as the first stop. Google may fill that ad and then send it out for bid of maybe 50 to 100 companies, all of which you have to respond to that bid and they usually do it within 10 milliseconds. So, that load is currently running at nearly 750,000 database requests per second. Sorry, advertising requests per second. That's 750,000.  So, you've got one database lookup to do and then a lot of math to do to decide among all your campaigns which one is the optimal bid and at what price. So, that's the use case where you've got to look up some user information. You've usually got a huge Hadoop stack on the side which is calculating for any given user, sweeping over all of its behavioral data every six hours to 24 hours, updating segments, updating models, and putting that towards the front edge of your service. And then, at this very high throughput rate, you're making bids on these advertising impressions. You'll also find cases in market research and market retailing where companies like JPMorgan are using companies like S++1 to provide in-depth 360-degree customer view of everyone that comes to their website, people who have accounts to figure out how to place products. S++1 is one of our customers that also uses Aerospike database and not quite in the advertising real-time way but to do calculations and store all of the information and all of the recent behavior. So, essentially, sort of popping up the big picture for Aerospike, it's really all about user interactions. And that's where you've got the level of read capabilities and write capabilities. You have a very large working set because it's everyone on the Internet, and you have these big data clusters, Hadoop clusters and such out there, capable of generating very interesting insights in what to place first. Very good. And the characteristic of that is that they need very, very fast response time for a request. You know, having a bidding and having all those bids collected in under 10 milliseconds seems like something that can be challenging to do if you have rotational bids in there. Yeah, that was really the first use case, and it was also a big driver of flash. So, our first customer who deployed us nearly three years ago, over three years ago, said to me on a call, he was like, look, the economics of my business simply do not support RAM. We've done our modeling, and we know how much information we need to keep per user, and we know how much money we can make on the open market, and RAM's just a non-starter. So, with those guys and most of the guys in the advertising business, they are super aware of what their TCO is, and they know that they can't lose money on every transaction and make it up in volume. They have to be making money on every transaction, and that means hardware cost. But what we're also seeing now is companies like Facebook, right? So, at the Flash Memory Summit a couple of months ago, Facebook made the rather staggering admission in their keynote that they were buying an exabyte of flash storage this year. And it's available on the slides from download from that site, Flash Memory Summit. And the reason they're doing it is not really this millisecond bidding case. It's about how to get, do all of the database requests necessary to present a really rich experience to Facebook customers. So, share and thumbnails and recent activity of other users. I mean, just imagine the massive number of transactions required. So, part of it is about, the use cases we're seeing is about transactions per second and super low latency. But that's also coming into the rich web experiences, as shown by Facebook's buy and some of Apple's recent work within things like the iTunes Store and some of their online properties. It's about rich customer interactions, Dave or Tim, do you guys have any marks that you guys are getting into or case studies you'd like to share? I have more of a horizontal than a vertical from a market perspective. We're working lots of customers and in many successful businesses of all sorts and sizes where they built an application on MySQL or on MongoDB and they're successful and they just want to run faster. And I think by all measures, I have generally the bottleneck on MySQL and MongoDB applications or it can be a big contributing bottleneck. Often times, the attempt to put a bottleneck is to put in flash. But these put in PCI flash cards. The challenge with doing that is we just talked about how inexpensive disks or let's call them cheap is definitely in the middle and probably closer to RAM than spinning disks. So often times we'll run into evaluators and customers who want to put flash under their application to make it more performant. They're doing ODP and they're doing OLAP on the same data. So they've got lots of reads and lots of writes going on. But you guys just can't afford to solve their problem without compression. So my horizontal here that I'm going to explain is it's that type of customer. Someone who flash would solve their performance problem but unfortunately makes their infrastructure too expensive to support the application. And by introducing high compression it's generally equalizes that if 5X compression or 10X compression suddenly one-fifth on the flash you would in its compressed form. Which is generally uncompressed as long as MongoDB is. MongoDB does not do compression and may equal while there's a compression option. You can really don't use it because it severely damages the performance characteristics of MySQL. So that's what we're seeing lots of. It's customers who they've been successful. The ad needs to go faster for them there but flash is too expensive in its uncompressed form. And where the DB and 5X come in to give the people a capability through compression. So a summary if they're IO bound and they don't want to change their software stack basically use your software as an underlying thing and for example if they're running on Mongo they'll just do a forklift upgrade to your software and they don't have to change their API and they'll get much faster throughput. So generally changing the software stack is going to be you know, magnitude more expensive than the in the same application stack. All right. So Dave, let's run it up with you here. Tell me what industries you guys are looking at seeing opportunities. Yeah, I think we've run into a lot of the same industries as the other guys. Consumer, consumer, hands, some games, but I'll try to I'm interested in addressing this pricing question and I'll sort of try to tell you something that I tell a lot of the customers of FoundationDB across verticals and that's about to flash and that's that you really just have to figure out whether it works with the cost structure of your business and a lot of different cost structures to businesses in the world and I would say that a lot of them like the price of the storage medium is really that relevant to the business. If you are running a big business and you have 100 gigabytes of data to store or even 10 terabytes of data to store it doesn't make a difference whether you're I mean to be honest whether you're storing it in a disk or flash or in memory for that matter. So that's one of the things that I guess I see over and over again is people initially come in and sort of say well I don't know if I want to spend the money to store my data in flash because it's like X times is more expensive but I think that a lot of the time a lot of times we sort of convince people that that's not the right way to think about it that you should actually go look at how much data you're talking about storing and then actually just try to put some numbers on it some actual dollars and if it's $20,000 or if it's $100,000 whatever like that you should be asking whether the cost is worth it not whether the factor is worth it and I think what you're seeing from people people even like this book and like Apple are saying you know even though the price is astronomical the benefits are astronomical as well and so we're going to do it and I think that's sort of an important way to look at the cost issue I totally agree I've seen a couple of case studies where people are running a cluster of 50 nodes and just by adding solid state drives they've been able to run the cluster on 25 nodes and that really makes it easier to manage and say heat and housing and all these things so I totally agree it's not just a matter of counting the bytes and figuring out the cost but really figure out what your SLAs are and how many nodes you need to have for that SLA to service it and what people are reminding from what I'm saying is that by using solid state drives they can use a lot fewer nodes and there are no SQL clusters so I can chime in on that for a second that's hitting on this use case I'd like to echo as well we recently flash itself is outperforming itself if that makes sense I'm not just seeing rotational versus flash but flash versus flash when our older customers is now refreshing their infrastructure and they're going from some of the first Samsung drives SS805 where they put four 100 gig drives in a machine and they had cluster sizes about 40 nodes and they're driving the same load now with Intel S3700s at 12 drives and they're taking a cluster size reduction from in the 40s to under 10 so and giving themselves head drive and that's the more modern flash drive absolutely they're going from 400 gig to nearly I think it's nearly two terra per node it's not that much more expensive due to the cluster and they're getting over 100,000 database transactions per second per node so we're a spike so all of that means flash is even beating flash it's great I'd like to echo what he said there and give a special shout out to Intel on the CES 3700 drives because those things are pretty awesome from our perspective here as I said I have virtually every consumer SSD that's been introduced to the market in the last four years and what Intel has done with this drive is they've brought basically consumer consumer SSD like pricing as maybe a 2x premium but they've brought like increased enterprise performance really reliable just all in every way so they deserve, I think a good recognition for that effort here one more thing to talk about on the rice issue if you don't mind let's get to some of the questions because we've got some good questions rolling in for our group here so go ahead all right I think something that's interesting in today's world is is Amon EC2 and maybe other cloud providers because nowadays it's running an application on UPIC technology it doesn't need to be MySQL or Mongo it could be data storage technology they've been running on EC2 for a while and running on CBS or ephemeral disks and they might have guaranteed IOPs we all live in a world where if you're technically heavy you can create servers and you can number to EC2 instances that are flash based and not a lot of money run a test and see just how much better performance you can get and know the price immediately Amazon's going to give you the calculator and it's really different you know I have a picture on my phone of when I benchmarked some Fusion I.O and ran my hand cards four years ago and back then you begged the vendor to get a sample to try something out and you wait and you install it and you configure it in weeks and time and that's what's really changed here is for a couple hours after you see the difference in performance without having to spend much money at all you know it's a bump in your budget for the daily 50 or 60 bucks to work in Amazon cluster with SSEs for a couple hours that's interesting in that you can now you're at the hey regardless of data technology on vendor flash or flash at all virtualized environments yeah so clouds are good ways to test architecture without doing capital buy the drives and if we're out there you might have a good chance of getting it to work effectively within your data center too or you can even use it so let's chat questions here we have in if everybody has their Q&A panel you can see some of the questions are coming up and I'm just going to pick out some that we can answer quickly are people applying the RAID architectures to configurations of solid state drives anybody want to take that one? so this gets into actually a kind of interesting topic which is so what we do at Aerospike and I'm sure the other guys would agree is in order to get a lot of parallelism you want the software to do a lot of the management of IOQs and workloads itself which works kind of in contrast to having a RAID card or operating system trying to manage things like the RAID stripe so what we've found in general is we require our customers to get that RAID card out of the way as much as possible and to turn on RAID and to present J-Bot interfaces with the recent LSI cards it's very important to use the FASTPATH what's called the LSI FASTPATH and we have some notes on our website and I did a high-scalability blog post if you're those are who are a follower of that blog so I would say RAID as a concept you need to spread the code but the standard RAID striping mechanisms and standard RAID cards are really getting in the way from our experience so it's really all about doing that at the database level and having the database really understand a bit more about data layout so RAIDs tend to hide the details of how things are actually happening and databases need that information to really optimize the IO and that's pretty consistent across a lot of the systems and another question how important is the block size when people are doing things do you guys customize block sizes for IO and things like that an operating system with 4K block sizes really doesn't apply when you're working with some of these big data systems Hadoop with their 64 megabyte block sizes I'll try to get that one I think it's somewhat important but I think what you'll find a lot of people are doing are using block sizes of basically 4 to 8K and this basically has to do with what I sometimes call the characteristic size of a storage device and basically the size where the marginal cost of the seek roughly equals the marginal cost of the bytes read so for example in SSD if you read a 1 megabyte block the seek is going to cost you far less than the reading of a 1 megabyte well but on a rotational disk you actually can seek to a spot and read hundreds of K in about roughly the same amount of time so one thing that you see with flash drives is if you can read a gigabyte a second and do 100,000 100,000 reads or writes per second then you can back out what the sort of workable or characteristic size of that device would be and usually for an OLTP type workload you want to have a bridge size which is that size so we sort of come back to where we started a long time ago and that 4 megabytes in a lot of cases and 4 is the sort of native block size of a lot of these SSDs so that's what a lot of these systems use but that's how I think about it I'll chime in on one point when people talk about those kind of block sizes they're often talking about the file system block sizes and so you know most databases older school databases Oracle certainly bypassing the file system is one of your first optimizations so one of the tricks of a flash optimized database is to really do the kind of trade-offs that Dave was just talking about and pick the right block size the right moment but it's going to be using direct access so your operator doesn't necessarily have the ability to change that Tom has a question here do you guys know of any studies about different devices and failure rates and performance and predictive wear analysis on these devices or are these devices so new that there aren't good third-party objective studies yet? I haven't panicked out I we've personally run to had two 96 SSD banks fail in highly correlated ways we in other words we came in the next the next day after leaving our cluster running some tests over the weekend which was a cluster with 96 SSDs and we had over 20 failures of our lives irrecoverable failures so I won't name the vendor just you know I guess email or something but these stories are not unique I've talked to many people that have these stories which I think is why as an industry all of us are so glad that we have somebody with you know the resources and credentials of Intel and some of these other vendors and a little bit more maturity in this space because you know averages don't make sense in these contexts old spin drives have these nice bathtub curves of you know they starting in you know Google has some awesome data about this but I would say if you're running the you know of the same SSD in a big cluster you should try to make sure it's from a vendor that you we're coming up to the top of our hour here is there any closing thoughts that you guys have future directions on when we'll stop using rotational drives for most database transactions next test here my predictions three years okay three years Brian predictions are always interesting I think three to five years it'll be interesting to see what happens in the flash and SSD market to see there's already some stratification between consumer enterprise class and then I enterprise class and maybe there'll be more information between the various lines just like there are in spinning disks you can get a terabyte for 60 bucks or you can get a terabyte for you know $10 enterprise grade on spinning disks and I think that's going to continue in the flash world can you really get what you pay for in many cases and optimize for different types of workloads then all right oh years no predictions you know at FoundationDB we have already pluggable storage engines that work with many and SSD and I think if anything in the coming years we'll be adding support for rotational disks believe it or not okay but that's just because there's always going to be tears of data that are hot or cold and you just can't get around that but I think what I'm seeing is that it represents a sweet spot for a lot of applications that's not only growing and so I think I think so it's both getting into memory and eating into rotational disk I believe and so I think that that sweet spot is going to continue to grow and that's my only prediction fantastic okay one point about this after my short prediction what I love about SSD and flash is if I was application developers you know they give me for saying to be a little sloppier they can write code that maybe does a little more seeks and those a little less hand optimized and build some great UIs and great proof of concept and just know that you know sort of that the hardware guys are going to help them out I'm seeing more interesting apps more interesting optimizations just because you know the power of SSD can be behind it okay great contributions and we'll look forward to other NoSQL now within our series next month and I want to especially reach out to thank Shannon Kemp and Tony for hosting us and we'll look forward to seeing you guys in the future thanks everyone bye bye thank you Stan thank you thank you brought him and Dave and thanks to all of our attendees who are always so interactive which I just love again I'll reiterate damn sentiments a great day bye now thanks good bye later


Serium-doped lutetium-mitrium oxy-orthosilicate, CE-LYSO, is a well-known single crystal scintillator used in medical imaging and security scanners. Recent development of high-power UV lead, matching its absorption band, questions the possibility to use CE-LYSO in a new way, as lead pumped solid-state light source. Since CE-LYSO is available in large-size crystals, we investigate its potential as a luminescent concentrator. This paper reports an extensive study of the performance in close relation to the spectroscopic properties of this crystal. It gives the reasons why the CE-LYSO crystal tested in this study is less efficient than CE-YAG for luminescent concentration, limited quantum efficiency, and high losses coming from self-absorption and from excited-state absorption are playing key roles. However, we demonstrate that a CE-LYSO luminescent concentrator is an innovative source for solid-state lighting, pumped by a peak power of 3400W in quasi-continuous wave regime, 40 microseconds, 10 Hz. This article was offered by Lisa Lopez, Pierre Pichon, Pascal Loisot, and others. We are article.tv, links in the description below.


Hey guys my name is Brittany and welcome back to my YouTube channel. You guys in today's video I'm going to talk about all of the summer homeschool plans that I have for my kiddos this year. So you guys let's go ahead and get right on into this video. So you guys like I'm so excited I am right at this very moment wrapping up my school year. This week is going to be our last week of school. The only thing we have to finish up this week is really our science curriculum and my daughter has to take a standardized test. So that's all we have for our last week of homeschool. So already I still kind of feel right now that I'm already like kick starting my summer. So I'm really excited to share with you guys like my summer homeschool plans that I have for my daughter. If any of you guys are new here to my channel I'm Brittany. I am a homeschooling mom to three girls ages 10 four and two and I have just completed my second year of homeschooling you guys. So I am a pandemic homeschooler however you guys I think I'm in this thing for the long call. I really have grown to love homeschooling love the freedom the flexibility. I just really love everything about it. So yeah so you guys this year we're going to kind of transition into doing something completely new and completely different. I really want to try year around homeschooling. So our summer is going to be pretty pretty short this year because in July we are going to go ahead and kick start off our fifth grade year. So I'm really really excited to try out year around homeschooling really because our season's here in Georgia. You guys like right now the weather is nice. We have this cool breeze. It's fun to be outside and play. But you guys once we hit like July and August like you do not want to be outside. I promise you you can fry an egg on like the concrete. It is that hot. It's just really to the point where the kids can't really go outside and enjoy the weather when it gets to like July and August. So last year you guys we were kind of like stuck in the house. So I figured we should go ahead and just continue and start our homeschooling year. My daughter told me in July she was so bored she was ready to start school. So I think this year I'm just going to try it out and then in September when the weather gets cooler we will be able to have more days off in the fall to be able to enjoy that season instead of us you know just being bogged down with all of like our hardcore curriculum. So that is my plan. So we're going to we're going to have our summer break the whole month of June and half of May because our last day of school is May 20th or the last two weeks of May. So that is going to be our summer. So it's going to be about like six to seven weeks of summer and then in July we're going to be headed on into our school year. We're going to have like a gentle start into our school year. So now that I gave you guys the rundown I'm going to go ahead and show you some of the read-alouds that I have planned for us for our summer slash start of our upcoming homeschool year. So right now you guys we are finishing up Fastpitch which is a really really cute story about Shanice. She is a softball player. She is actually the captain of all black girl softball team which is new in her community. So she is trying to lead her team to victory and so far we have read the first I think first four chapters of this book and I cannot wait for us to continue this book on into our summer break and yeah so this is one of our read-alouds that we're going to finish up. Another read-aloud I have selected for us is The Lemonate War. So I really am excited about this one. This book really goes on into talking about Entrenure Preciate or Entrenure Preciate. Entrenure okay you guys I can't talk right now. You know what I'm trying to say. So I really think Brielle is going to enjoy this book reading about The Lemonate War, reading about what happens. Maybe we can bring in some finance in here. So I really feel like this is going to be a fun one for the summertime. We're also going to be reading here in the real world which is a story from Sarah Pennypacker. This follows along a group of kids while they're at summer camp. So I feel like this is a pretty ambitious but fun pile of read-alouds that we can do for our summer. Now some of these are going to roll into the start of our school year so I'm really really excited because it's still going to be summer and I think these are going to be like fun books that we can kick off our home schooling year in July as well. So as far as like curriculum goes my daughter told me she does not want to take a break from math so we are going to be continuing doing Saxon math. She's going to start Saxon math in June and then just continue it on. So she's going to have like a couple of weeks break from math but math is one of those subjects for my daughter if she takes too long of a break she kind of gets rusty and she doesn't like that feeling of having to review and get caught back on those skills that she remembered she once has had downpacked. So we are going to go ahead and continue with Saxon. We ended off our year on lesson 64 so we are halfway through Saxon 6-5 so I'm really really proud of her for all of the work that she put in this semester. So we are just going to chug along with this. She's going to do four lessons a week until the start of our official school year. So four lessons a week. Saxon is completely independent for my daughter because she actually utilizes Nicole the math lady which has been such a great resource for me so she can do this work independently. Saxon takes her about 45 minutes so 45 minutes of her day doing math. I don't think she minds and she actually told me she wants to continue math so I'm going to listen to Brie and she's going to work on Saxon math for the summer. Along with that I want my daughter to continue to work on her creative writing. She loves writing on her spare time so she actually started this summer journal last year and I gave it to her the other day and she kind of was able to read some of the things that she wrote. She had a little bucket list in here for last summer so I want her to continue using the same exact journal that she used last summer and to get creative to write some things down to have fun to draw whatever she is feeling that day. I want her to grab this journal and document it. Document some of the things that we get up to in summertime. We have a lot of little pools and splash pads and things like that that I'm going to take the girls to. In the library every season we get free tickets to the zoo and we get free tickets to the aquarium through our library system so those are some activities that we can do. No cost to us. The only thing we have to pay is the parking and everything like that so when we get up to those funny venture types of things she's going to have opportunity to write about them for like her summer thing so I'm really happy for her to continue this. So you guys along with summer I do have some like extra workbooks that we worked on last year. These are just like some supplemental workbooks I pulled off my shelf. This is not going to be really like required of her to do or anything like that but if she wants to and if I find that it's something we want to refresh some of our skills on we can grab some of these workbooks we already have at home. I have this reading comprehension test that she actually uses for practicing preparing for her standardized test. We didn't complete this one for the school year. I think we have like three or four more tests in here that she can do. I also have this grammar book from Scholastics that she worked on last summer. This right here is really cool for her refresh in some of her grammar skills. It's really really simple workbooks because these are all grammar skills she already knows this will be like review for her. I will not have to teach her anything so this is just going to be all official independent work. Along with that you guys I also have her 180 days of spelling and word study so she can work on those vocabulary skills. Not necessarily spelling because she's really really good at spelling so this is another workbook we can pull off if we want to add something to it. So I do have like these workbooks on my shelf. I really didn't want to go out and buy like one of those summer workbooks. I just really wanted to utilize like what I had. So um if we want to use these we do have these but the main thing I want her to do and we're going to do is going to be our um sax and math and we are going to work on our read aloud. So that is it for Brielle. So Brielle is pretty much going to be independent the rest of her time.   We um we didn't get a chance to do as many activities as I wanted to in our playing preschool. So I'm going to pull this baby back out and we are going to like have fun doing some of these activities in here and I definitely think the girls are going to love it especially some of the activities that they have for this next unit that we're in. We are going to be doing the nursery rhyme unit next and they're going to love this activity right here where they get a chance to play like in the water as they are learning about Jack and Jill. So it's a lot of fun activities and outdoor activities that I can pull out uh doing this playing preschool. I really want to uh give that extra special time to my toddlers this summer while Brielle is like off and on break really because I didn't have that much time to focus in on them as much this school year. We had a pretty rocky school year to start off with and then once we finally got into the flow of things I really was just trying to wrap up things with Brielle. So I really want to give my toddlers uh that special attention especially before we start off our new school year.  We are going to continue playing preschool throughout our school year however I really want to get a good kickstart on it and get like into a good routine with playing preschool. Along with that we are going to be working on preschool math at home you guys. Leia my four-year-old who is doing this program she has been doing so well with preschool math at home. She really enjoys this hands-on approach to math using just real like things around our home and right now we are on chapter two so she is going through this preschool math at home pretty fast so I don't anticipate her working on this one for too long so I'm really excited for us to continue off with preschool math at home. And then you guys the last thing that we are going to be doing is we're going to be working on exploring nature with children. So I really like I said before in my other video I really want to get out there in nature. I really want to challenge myself to get out there in nature with my kiddos. So we actually have started exploring nature with children. We started early in May. We did the caterpillar weeks that they had. We didn't do the ant week that they had in the middle of May and right now we are going into butterfly week and it's so amazing that we are going through this process with exploring nature with children because we actually got live caterpillars and we are watching them turn into butterflies. Right now they're in their chrysalis phase and I actually was able to put them in their habitat today so we have another 10 more days before we actually have caterpillars. So I mean not caterpillars before we have butterflies so it's really really exciting doing this and reading all the books. One of the books that we are reading right now with exploring nature with children is a butterfly. It's patient and I'm so happy like this is one of the books I already had like on my shelf. So I'm so happy that we are going through like the life cycle of the butterfly or the caterpillar butterfly. It's it's been so much fun and it's just so crazy how we've been able to experience each process by watching these caterpillars. So I have really been enjoying exploring nature with children. I really hope that I can continue to add in these nature studies throughout our school year.  So we have a trail that's really really close to us and I want to take the kiddos down the trail maybe do some nature hikes especially before it gets too hot here in Georgia. Like I said before you guys we be hitting like hundreds, hundred fives in the summer. It's so hot. So before the weather gets that hot I really want to go out there in nature and enjoy that with the kiddos. Okay you guys when we actually start off our homeschooling year in July after we have like officially wrapped up our summer break we are going to give like a soft start to our fifth break a year. So the only things that I have planned for us to start off in July is going to be a Saxon Math. We're going to continue with this. We are going to go ahead and get on into our Fixit Grammar. We're going to be in the second book the town mouse and the country mouse and then we are also going to do IEW. So that is all I have planned for us for our soft start for our homeschooling year in July. Just to get prepared when August hits is when I'm probably going to go ahead and add in like our science and our history. So we're going to start off our homeschooling year just doing these three things in July. I don't anticipate us having like full full days in July but it's going to be probably like maybe two hours we're going to dedicate on school doing these things right here. So I'm really excited to try out year-round homeschooling. I really hope it gives me the flexibility and more breaks that I am looking for in our homeschool. I really want to start adding in those enrichment things like nature study, art study, composure study. I really want to add those things into our homeschool and I figured the only way for me to be able to do it is for me to give myself more time and not confine myself in this like eight month school period or 36-week school period to get it all done. So I really hope this year-round homeschooling does work out for us. If it doesn't I can always go back but yeah that's just what we're going to try out this year. So you guys I really hope you enjoyed today's video. I really hope you enjoy seeing like all of our summer homeschool plans. I really hope you kind of get some inspiration from this video about what we're doing for our summer. So you guys as always thank you so much for watching and I look forward to seeing everybody in my next one. Bye!


Hi, my name is James, and I'm voting guest for the Marge Equality Vote on May 22nd, and I hope you vote with me. So one of the most fundamental things we cannot control about our life is when we die. This is the most exciting thing about life. It is the divine drive within us to live life to the full and make sure we don't hold any regrets. So therefore, why would you try to control someone else's happiness? The things we cannot control are sometimes the greatest things life has to offer. If loving another man or woman, no matter what sex you may be, makes you happy, then it shall be equally respected by everyone, as a man and woman together has always been. It's important to wear the shoes of the other person, and respect who they are and let them marry whoever they feel free to.